Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 21 kwi 2026, o 21:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 22 wrz 2013, o 08:52 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

Witam wszystkich,

Próbuje stworzyć efekt świetlny który będzie zaświecał diody i gasił płynnie wcześniej zapalone, taki jak serialu o czarnym samochodzie.

Puki co chciałbym go uruchomić na płytce testowe ATB ATmega 32 taktowana 8MHz z wewnętrznego źródła.

Wymyśliłem sobie taki kod :

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Problem w tym że dostaje od eclipsa warning że zmienna cnt nie jest nigdzie wykorzystana, czy ktoś z zacnych kolegów może wytłumaczyć co robię źle? Program powstał na podstawie przykładu z niebieskiej książki Mirka tyle że tam nie było takie problemu. Osobiście uważam że ta zmienna wykorzystywana jest tylko w obsłudze przerwania no ale jednak chyba nie zupełnie mam racje bo jednak program nie działa tak jakbym chciał (wszystkie diody są zgaszone). Czegoś pewnie brakuje w tym programie, ale chyba nie mam pomysłu czego.

Pozdrawiam



Ostatnio edytowano 22 wrz 2013, o 10:45 przez stanley019, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 09:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Warning warningiem, może trzeba zrobić clean albo coś.
Czy program po wgraniu do proca działa?

Coś z tą wklejoną składnią jest nie tak bo czegoś tam brakuje w paru miejscach (wyedytuj i wklej zgodnie z regulaminem bo przyjdzie mod i będzie marudził)

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 09:39 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

Poprawiłem składnie w 1 poście, dziwna sprawa z tym przesunięciem bitowym, tylko tam urwało :)
Niestety program nie działa.
Po wyczyszczeniu problem dalej występuje, z resztą na potrzeby tego programiku stworzyłem sobie nowy projekt.
czegoś pewnie brakuje, zastanawiam się tylko czego, bo program z niebieskiej książki jest bardzo podobny różnice są w pętli nieskończonej "while(1)" ale to nie powinno mieć wpływu na zmienną cnt bo tam nie jest wykorzystywana.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 09:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

to teraz schemat i wyjście z konsoli po kompilacji

Kod dalej nie jest wklejony zgodnie z regulaminem (chyba, że się mylę, a to bardzo możliwe)

Dalej masz poucinane, przy include'ach na przykład

Nie jestem pewien ale PORTC chyba nie ma tu konkretnej wartości
stanley019 napisał(a):
    DDRC=PORTC; //kierunek portu wyjsciowy (dlatego jest znak "=" zamiast "|=" który nie zmienia ustawień pozostałych portów) 


spróbuj dać

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



stanley019 napisał(a):
    if(cnt >= pwm1) PORTC |= (1<< PC0); else PORTC&~~(1<< PORTC0); 
    if(cnt >= pwm2) PORTC |= (1<< PC1); else PORTC&~~(1<< PORTC1); 
    if(cnt >= pwm3) PORTC |= (1<< PC2); else PORTC&~~(1<< PORTC2); 
    if(cnt >= pwm4) PORTC |= (1<< PC3); else PORTC&~~(1<< PORTC3); 
    if(cnt >= pwm5) PORTC |= (1<< PC4); else PORTC&~~(1<< PORTC4); 
    if(cnt >= pwm6) PORTC |= (1<< PC5); else PORTC&~~(1<< PORTC5); 
    if(cnt >= pwm7) PORTC |= (1<< PC6); else PORTC&~~(1<< PORTC6); 
    if(cnt >= pwm8) PORTC |= (1<< PC7); else PORTC&~~(1<< PORTC7); 


tutaj kolega też coś chyba namieszał
wydaje mi się , że jakoś tak to raczej powinno wyglądać

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:20 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

includy poprawione,

reszta kodu już jest ok przynajmniej tak mam w edytorze.

DDRC=PORTC ok tu ma kolega racje poprawione, w przerwaniu też namieszałem i też poprawione,

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Konsola mówi do mnie tak:

Kod:
**** Build of configuration Release for project rider ****

make all
Building file: ../main.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
../main.c: In function '__vector_4':
../main.c:246: warning: value computed is not used
../main.c:247: warning: value computed is not used
../main.c:248: warning: value computed is not used
../main.c:249: warning: value computed is not used
../main.c:250: warning: value computed is not used
../main.c:251: warning: value computed is not used
../main.c:252: warning: value computed is not used
../main.c:253: warning: value computed is not used
Finished building: ../main.c
 
Building target: rider.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,rider.map -mmcu=atmega32 -o "rider.elf"  ./main.o   
Finished building target: rider.elf
 
Invoking: AVR Create Extended Listing
avr-objdump -h -S rider.elf  >"rider.lss"
Finished building: rider.lss
 
Create Flash image (ihex format)
avr-objcopy -R .eeprom -O ihex rider.elf  "rider.hex"
Finished building: rider.hex
 
Create eeprom image (ihex format)
avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex rider.elf  "rider.eep"
Finished building: rider.eep
 
Invoking: Print Size
avr-size --format=avr --mcu=atmega32 rider.elf
AVR Memory Usage
----------------
Device: atmega32

Program:    1220 bytes (3.7% Full)
(.text + .data + .bootloader)

Data:          9 bytes (0.4% Full)
(.data + .bss + .noinit)


Finished building: sizedummy
 

**** Build Finished ****




Schemat za chwilkę narysuje, choć mówiąc szczerze jest prosty z PORTU C do (8 przewodów) LED przez rezystory do VCC.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

No i się koledze skompilowało

teraz należy to wgrać i podziwiać

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

if(cnt >= pwm1) PORTC |= (1<<PC0); else PORTC &~~ (1<<PC0);
do
if(cnt >= pwm1) PORTC |= (1<<PC0); else PORTC &=~ (1<<PC0);

i analogicznie w pozostałych

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

pisałem właśnie wyżej , że coś tu nie gra a kolega stanley nie poprawił

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:41 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

schemat:
Obrazek

zasilanie reset itp pominąłem, działać działa bo to płytka testowa ATB :)
cały czas się kompiluje, tyle że diody nie chcą świecić.

Cytuj:
if(cnt >= pwm1) PORTC |= (1<<PC0); else PORTC &~~ (1<<PC0);
do
if(cnt >= pwm1) PORTC |= (1<<PC0); else PORTC &=~ (1<<PC0);


Instrukcje w przerwaniu poprawione, w obu listingach, ale nie bardzo rozumiem po co tam ta instrukcja do?



Ostatnio edytowano 22 wrz 2013, o 10:44 przez stanley019, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

To nie jest instrukcja, mówię tylko, że należy zmienić linijkę z powodu błędu (zamiast przypisania wartości masz jedynie obliczenie wyrażenia). A "do" oznacza, że linijka jest do zmiany na poniższą...

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:47 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

Aaa to to poprawione jest tyle że dalej nie chce działać.
Zastanawiam się czy jest możliwe żebym coś skopał z konfiguracją chociaż uC i częstotliwość są ok bo gdy samo błyskanie diodą wstawię do programu to działa



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 10:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Dodaj sobie w pętli for błyskanie dodatkową diodą za każdym jej przebiegiem. Najprawdopodobniej przerwania co 200 cykli zegarowych zabierają za dużo czasu procesora (nie mówiąc o okropnym wydłużeniu instrukcji "delay").

------------------------ [ Dodano po: 23 minutach ]

JTAG został wyłączony?

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 18:23 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

@barnej, sory za długą przerwę, ale do rzeczy JTAG wyłączony, z dodatkowa dioda w pętli for zaraz na samym początku też nic się nie dzieje. na początku wszystkie LEDY raz mrugną i koniec.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 18:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Jeżeli przez nic się nie dzieje masz na myśli, że nie zmienia swojego stanu, to poluzuj częstotliwość przerwań. Ustaw np. prescaler na 8 i zobacz czy mu się polepszy.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 18:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 lut 2013
Posty: 376
Lokalizacja: Kłopoty-Stanisławy
Pomógł: 33

Przy 8 Mhz może kolega ustawić spokojnie preskaler na 8 i wartość OCR na 65

To, jeśli się nie pomylliłem powinno dać ok 60Hz i nie będzie widać mrugania i proc odetchnie.

------------------------ [ Dodano po: 1 minucie ]

ale brak reakcji to nie wina nie wyrabiania się procesora raczej ...

------------------------ [ Dodano po: 2 minutach ]

a co i gdzie dopisałeś do kontrolnego migania diodą ?


Autor postu otrzymał pochwałę

_________________
50 znaków Atnela ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 18:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Dobra, aż układ zbudowałem :lol:

Kod taki:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Przebiegi takie:
Obrazek Obrazek

Jak widać częstotliwość się zgadza, bo 8MHz/200/256=156.25Hz

Kod wygląda na działający, szukaj błędu w fizycznym układzie.

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 19:47 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

@barney to jakieś czary są, skopiowałem kod który jest w poście wyżej i działa :O

Chyba że to nie są czary tylko coś w międzyczasie znalazłeś jeszcze?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 19:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

No to musisz porównać, ja żadnych czarów nie robiłem nad tym plikiem :-)
I niczego nie zmieniałem, oprócz tego co wymieniłem w tym temacie...


Autor postu otrzymał pochwałę

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 wrz 2013, o 20:11 
Offline
Nowy

Dołączył(a): 04 paź 2011
Posty: 21
Pomógł: 0

No wyglądają tak samo, zmiany o których mówiliście robiłem na bieżąco, muszę poćwiczyć jeszcze te timery, dzięki wszystkim za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO