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



Teraz jest 12 kwi 2026, o 03:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 11 gru 2014, o 02:21 
Offline
Nowy

Dołączył(a): 11 gru 2014
Posty: 2
Pomógł: 0

Witam

Napotkałem dziwny problem z poniższym kodem:

[ panie kolego - przeczytaj NAJPIERW DOKŁADNIE to: topic7402.html i popraw ten post - mirekk36 ]

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


Książkowy przykład mrugania diodą na procesorze Atmega8A
Ustawione taktowanie to 8 MHz (ustawione za pomocą mkAVRCalculator), podobnie w Project -> Properties, jednak procesor nie reaguje na zmianę programu. Jedyna jego reakcja następuje po zmianie ustawień taktowania na 1 MHz, oraz 16 MHz.
Może mieć to związek z tym, iż nie mogąc znaleźć rozwiązania uznałem, iż może nie działa ustawienie taktowania, więc:
W funkcji _delay_ms ustawiłem wartość 200, dla ustawionego taktowania 1 MHz. Program o dziwo zadziałał, jednak kolejna próba zmiany czasu opóźnienia nie powiodła się, dla jakiegokolwiek argumentu delay dioda mrugała z taką samą częstotliwością.
Więc zmieniłem taktowanie na 8 MHz i ustawiłem czas opóźnienia na 1000 ms, co również zadziałało, ale tak jak poprzednio nie było możliwości zmiany na jakikolwiek inny czas opóźnienia. Ostatecznie, ustawiłem _delay_ms(5000) i odpaliłem program przy taktowaniu (zmienionym w EclipseGadget) 16 MHz, zadziało.
Teraz sytuacja wygląda tak, iz cokolwiek ustawię w kodzie, wykonywanie programu zmienia się jedynie dla zmiany wartości taktowania procesora, co więcej: zmienia się na wartości, które ustawiałem dla kolejnych (1, 8, 16) taktowań...

Co zrobiłem źle? Przypomnę, że już na samym początku, zanim zacząłem "eksperymentować" procesor (mimo poprawnego wykrywania go w mkAVRCalculator, oraz bezbłędnej kompilacji) nie odpowiadał na zmianę wgrywanego programu...

Poniżej zamieszczam także wynik kompilacji:
Kod:
//Wynik kompilacji
02:19:33 **** Build of configuration Release for project PierwszyAVR ****
make all
Building file: ../Pierwszy.c
Invoking: AVR Compiler
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega8 -DF_CPU=8000000UL -MMD -MP -MF"Pierwszy.d" -MT"Pierwszy.d" -c -o "Pierwszy.o" "../Pierwszy.c"
Finished building: ../Pierwszy.c
 
Building target: PierwszyAVR.elf
Invoking: AVR C Linker
avr-gcc -Wl,-Map,PierwszyAVR.map -mmcu=atmega8 -o "PierwszyAVR.elf"  ./Pierwszy.o   
Finished building target: PierwszyAVR.elf
 
Invoking: AVR Create Extended Listing
avr-objdump -h -S PierwszyAVR.elf  >"PierwszyAVR.lss"
Finished building: PierwszyAVR.lss
 
Create Flash image (ihex format)
avr-objcopy -R .eeprom -R .fuse -R .lock -R .signature -O ihex PierwszyAVR.elf  "PierwszyAVR.hex"
Finished building: PierwszyAVR.hex
 
Create eeprom image (ihex format)
avr-objcopy -j .eeprom --no-change-warnings --change-section-lma .eeprom=0 -O ihex PierwszyAVR.elf  "PierwszyAVR.eep"
Finished building: PierwszyAVR.eep
 
Invoking: Print Size
avr-size --format=avr --mcu=atmega8 PierwszyAVR.elf
AVR Memory Usage
----------------
Device: atmega8

Program:      90 bytes (1.1% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Finished building: sizedummy
 

02:19:35 Build Finished (took 1s.666ms)


oraz wynik wgrywania programu przez program Eclipse:

Kod:
//Wynik wgrywania programu:

Launching D:\Programy\MkAvrCalculator\AVRDUDE\avrdude -pm8 -cusbasp -Ereset,vcc -Uflash:w:PierwszyAVR.hex:a
Output:

Please wait ...
avrdude_mk.exe: WARNING: -E option not supported by this programmer type

avrdude_mk.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_mk.exe: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude_mk.exe: Device signature = 0x1e9307
avrdude_mk.exe: NOTE: FLASH memory has been specified, an erase cycle will be performed
                To disable this feature, specify the -D option.
avrdude_mk.exe: erasing chip
avrdude_mk.exe: warning: cannot set sck period. please check for usbasp firmware update.
avrdude_mk.exe: reading input file "PierwszyAVR.hex"
avrdude_mk.exe: input file PierwszyAVR.hex auto detected as Intel Hex
avrdude_mk.exe: writing flash (90 bytes):

Writing | ################################################## | 100% 0.06s

avrdude_mk.exe: 90 bytes of flash written
avrdude_mk.exe: verifying flash memory against PierwszyAVR.hex:
avrdude_mk.exe: load data flash data from input file PierwszyAVR.hex:
avrdude_mk.exe: input file PierwszyAVR.hex auto detected as Intel Hex
avrdude_mk.exe: input file PierwszyAVR.hex contains 90 bytes
avrdude_mk.exe: reading on-chip flash data:

Reading | ################################################## | 100% 0.05s

avrdude_mk.exe: verifying ...
avrdude_mk.exe: 90 bytes of flash verified

avrdude_mk.exe: safemode: Fuses OK

avrdude_mk.exe done.  Thank you.

Compiled special for http://forum.atnel.pl (v5.11.1)

avrdude finished


Pozdrawiam ;)



Ostatnio edytowano 11 gru 2014, o 22:47 przez Bartosz, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2014, o 06:42 
Offline
Użytkownik

Dołączył(a): 31 mar 2014
Posty: 55
Pomógł: 2

Po pierwsze: Sprawdź podłączenie procka z vcc i gnd oraz filtrowanie zasilania.
Po drugie: Sprawdź czy Eclipse wykrywa Ci procka jak klikniesz Load from MCU. Jeśli nie odczytuje to coś jest nie tak. Możesz dać schemat jak podłączasz diode do procka bo to też ma znaczenie ;) I sprawdź co Ci odczytuje MkAvrCalc bo może nie zapisujesz częstotliwości do procka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2014, o 06:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Bartosz napisał(a):
i odpaliłem program przy taktowaniu (zmienionym w EclipseGadget) 16 MHz, zadziało.

...a jakim cudem osiągnąłeś 16MHz - dajesz różne kwarce, czy tylko deklarujesz w Eclipse że z taką częstością pracujesz?. Przypomnę też, że po każdym dłubaniu w kodzie najpierw clean a dopiero później kompilacja.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2014, o 20:38 
Offline
Nowy

Dołączył(a): 11 gru 2014
Posty: 2
Pomógł: 0

Dzięki za szybką odpowiedź ;)
k_lukasik:
Też o tym myślałem, ale wszystkie połączenia są dobre, sprawdzałem to wiele razy. Co do filtracji zasilania nie bardzo wiem jakie kondensatory użyć, stosuję zwykle po jednym na wejście 100nF, ale dokładnie nie wiem jak owa filtracja powinna wyglądać, więc przy okazji może ktoś zechce mnie naprostować.
Co do wykrywania sprzętu: Wszystko działa jak należy. mkAVR wykrywa procka, programator widoczny w systemie, menedżer urządzeń sprawdzony, Load from MCU także, dioda na programatorze świeci podczas wgrywania programu, a po pracy procka widać, że następuje wtedy reset. (wykonywanie dotychczasowego programu zostaje wstrzymane, nic się nie dzieje). Także z tej strony wszystko jest ok. :)
kicajek:
Częstotliwość "osiągnąłem" jedynie poprzez zmianę ustawień w Eclipsie, bądź EclipseGadget, różnie, efekt jednak ten sam. Nie stosuję zewnętrznego oscylatora. Po każdym dłubaniu w kodzie robiłem wciąż Clean i build, więc problem także nie leżał w tym.

Udało mi się jednak dojść do rozwiązania:
Okazało się, że po każdym dłubaniu w kodzie plik należy najpierw zapisać, potem wyczyścić, dopiero potem można z powodzeniem wgrywać w procesor. Wtedy wszystko działa beż żadnego problemu. Przyznam, że trochę mnie to zaskoczyło. To pierwsze środowisko które spotykam, w jakim tyle "procedur" należy przechodzić przy kodowaniu. Wiem oczywiście, że są różnice między programem dla AVR, a zwykłym .exe, jednak przyzwyczajenia robią swoje :P

Pozdrawiam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2014, o 21:32 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

Ostrzeżenie za ignorowanie próśb Admina.

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 gru 2014, o 22:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2014
Posty: 745
Lokalizacja: Warszawa
Pomógł: 32

Bartosz napisał(a):
Okazało się, że po każdym dłubaniu w kodzie plik należy najpierw zapisać,
Kolego to chyba nic dziwnego akurat bo jak nie zapiszesz projektu to kompilator użyje pliku z dysku z ostatnio zapisaną zawartością. Gdybyś przejrzał choć pobieżnie blog Pana Mirka to byś znalazł świetne poradniki jak konfigurować sobie środowisko Eclipse do pracy i wiedziałbyś m.in. jak ustawić sobie Auto Save przed każdym Build-em.

A jak chcesz "naprostować" swoją wiedzę nt. poprawnej filtracji zasilania to również pełną wiedzę znajdziesz w poradnikach Pana Mirka, który tyle w nie włożył pracy, a jaki widać często początkującym nie chce się nawet do nich zajrzeć :-)
No i popraw Kolego umieszczenie swojego listingu wg. wskazań Adminów bo nie da się tego czytać.

_________________
.



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: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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