Problem z ATMega 8
Problem z ATMega 8
Witam.
Mam pewien problem z ATMega 8. Odrazu zaznaczam że dopiero się uczę programować. uC taktowany jest oscylatorem 8MHz. Otóż napisałem program który migał diodą LED. Odstępy zrobiłem komendom Wait 1 - czyli ok 1 sek. I tu zaczyna się problem. Zamiast 1 sek. odstęp wynosi dobre pare sekund. Nie wiem dlaczego tak się dzieje. Proszę o pomoc.
Mam pewien problem z ATMega 8. Odrazu zaznaczam że dopiero się uczę programować. uC taktowany jest oscylatorem 8MHz. Otóż napisałem program który migał diodą LED. Odstępy zrobiłem komendom Wait 1 - czyli ok 1 sek. I tu zaczyna się problem. Zamiast 1 sek. odstęp wynosi dobre pare sekund. Nie wiem dlaczego tak się dzieje. Proszę o pomoc.
Re: Problem z ATMega 8
Wewnętrzny generator RC jest w miarę poprawnie skalibrowany. Twój problem tkwi w innym miejscu. Musisz wyłączyć dzielnik częstotliwości zegara przez 8 (Clock divisor by 8 ), odpowiada za to fusebit CKDIV8. Standardowo ustawiony jest wew. osc. 8MHz i do tego włączony w/w dzielnik co daje ostatecznie 1MHz, stąd tak długi czas opóźnienia.Kamil 1 pisze:Witam.
Mam pewien problem z ATMega 8. Odrazu zaznaczam że dopiero się uczę programować. uC taktowany jest oscylatorem 8MHz. Otóż napisałem program który migał diodą LED. Odstępy zrobiłem komendom Wait 1 - czyli ok 1 sek. I tu zaczyna się problem. Zamiast 1 sek. odstęp wynosi dobre pare sekund. Nie wiem dlaczego tak się dzieje. Proszę o pomoc.
Dodatkowo pisząc program w Bascom'ie musisz na samym początku podać częstotliwość taktowania uC w Hz ($crystal=8000000), aby komendy typu wait mogły poprawnie odmierzyć czas.
Pisząc program zawsze pamiętam aby na początku wstawić komendy $regfile i $crystal. Co do tych fusebit to jak pisałem na początku dopiero zaczynam programować i ostatnio przez grzebanie w tych fusebit zablokowałem Attiny 2313
Dlatego prosiłbym o wytłumaczenie co i jak poprzestawiać aby atmega działał poprawnie i abym go nie zablokował.
No świetnie! Nawet głównej strony nie oglądasz? https://elportal.pl/modules.php?op=modl ... =0&thold=0
Ostatnio zmieniony 01 lip 2008, 16:57 przez aktus, łącznie zmieniany 2 razy.
A ATmega8 ma wogóle fusebit CKDIV8?
Tutaj masz link do kalkulatora fusów:
http://www.engbedded.com/cgi-bin/fc.cgi
Przydaje się.
Tutaj masz link do kalkulatora fusów:
http://www.engbedded.com/cgi-bin/fc.cgi
Przydaje się.
W tym artykule:
https://elportal.pl/index.php?module=Co ... y&ceid=243
pisze że ustawiając CKOPT na 1 i CKSEL3...1 na 111 częstotliwość wynosi tylko 8MHz
A jeżeli będę taktował wyższym rezonatorem to jak należy ustawić te bity 
https://elportal.pl/index.php?module=Co ... y&ceid=243
pisze że ustawiając CKOPT na 1 i CKSEL3...1 na 111 częstotliwość wynosi tylko 8MHz
Oczywiście, że ma.A ATmega8 ma wogóle fusebit CKDIV8?
Fusebity decydują o źródle sygnału taktującego i rodzaju wybranego oscylatora (karta katalogowa -> rozdział "Clock Sources"). Fusy ustawiasz adekwatnie do zastosowanego rezonatora, tzn. otwierasz data sheet'a i patrzysz, które ustawienia najbardziej będą pasowały do zastosowanego przez Ciebie oscylatora (zajrzyj do tabieli w rozdziale "Crystal Oscillator").Kamil 1 pisze:W tym artykule:
https://elportal.pl/index.php?module=Co ... y&ceid=243
pisze że ustawiając CKOPT na 1 i CKSEL3...1 na 111 częstotliwość wynosi tylko 8MHzA jeżeli będę taktował wyższym rezonatorem to jak należy ustawić te bity
Dzisiaj zaprogramowałem fuse bity w następujący sposób:
CKOPT = 1
CKSEL3 = 1
CKSEL2 = 1
CKSEL1 = 1
CKSEL0 pozostawiłem bez zmian czyli 1
wszystko zgodnie z tym artykułem https://elportal.pl/index.php?module=Co ... y&ceid=243 i po załadowaniu sygnatury uC wyskakuje mi CHIP LOCKED. Na szczęście odblokowałem go zegarem 1MHz.
Aha i jeszcze jedno:
Na początku prosiłem aby mi wytłumaczyć jak należy ustawić te fusebity a wy odsyłacie mnie do stronek w których się nie mogę połapać.
Proszę o pomoc.
CKOPT = 1
CKSEL3 = 1
CKSEL2 = 1
CKSEL1 = 1
CKSEL0 pozostawiłem bez zmian czyli 1
wszystko zgodnie z tym artykułem https://elportal.pl/index.php?module=Co ... y&ceid=243 i po załadowaniu sygnatury uC wyskakuje mi CHIP LOCKED. Na szczęście odblokowałem go zegarem 1MHz.
Aha i jeszcze jedno:
Na początku prosiłem aby mi wytłumaczyć jak należy ustawić te fusebity a wy odsyłacie mnie do stronek w których się nie mogę połapać.
Proszę o pomoc.
Ostatnio zmieniony 04 lip 2008, 10:22 przez Kamil 1, łącznie zmieniany 1 raz.
Błąd... ATmega8 nie posiada takiego bitu konfiguracyjnego jak CKDIV8 a dokumentacja ATmega8(L) na 308 stronach przydatnych informacji nie wspomina o nim nawet słówkiem.Ddevil pisze:Oczywiście, że ma.A ATmega8 ma wogóle fusebit CKDIV8?
Radzę się zastanowić zanim się cokolwiek napisze aniżeli wprowadzać ludzi w błąd.
A co na to karta katalogowa?Kamil 1 pisze:W tym artykule:
https://elportal.pl/index....isplay&ceid=243
pisze że ustawiając CKOPT na 1 i CKSEL3...1 na 111 częstotliwość wynosi tylko 8MHzA jeżeli będę taktował wyższym rezonatorem to jak należy ustawić te bity
W wolnym tłumaczeniu: "Dla rezonatorów, maksymalna częstotliwość wynosi 8MHz z niezaprogramowanym fusebitem CKOPT oraz 16MHz z zaprogramowanym CKOPT".Datasheet ATmega8(L) pisze:For resonators, the maximum frequency is 8 MHz with CKOPT unprogrammed and 16 MHz with CKOPT programmed.
Wystarczy wpisać 0 do CKOPT jeśli chcesz wykorzystać rezonator 16MHz.
Pozdrawiam
spark
[ Dodano: 2008-07-03, 17:13 ]
A powiedz mi z czym masz problem to jakoś zaradzimy.Kamil 1 pisze:Na początku prosiłem aby mi wytłumaczyć jak należy ustawić te fusebity a wy odsyłacie mnie do stronek w których się nie mogę połapać.
Proszę o pomoc.
W art starałem się wyjaśnić teoretycznie jak najprościej się da, jak zaprogramować "fuse bity".
Po pierwsze: Czy masz programator ISP? Jeśli tak to jaki?
Po drugie: Z jakiego źródła chcesz taktować uC i jaką wartością częstotliwości? Czy to ma być kwarc zewnętrzny, RC, czy możne wewnętrzny generator?
Tak też mi się zdawało że nie ma bo się nie spotkałem z nim ani nie widziałem.Spark89 pisze:Błąd... ATmega8 nie posiada takiego bitu konfiguracyjnego jak CKDIV8 a dokumentacja ATmega8(L) na 308 stronach przydatnych informacji nie wspomina o nim nawet słówkiem.Ddevil pisze:Oczywiście, że ma.A ATmega8 ma wogóle fusebit CKDIV8?
Radzę się zastanowić zanim się cokolwiek napisze aniżeli wprowadzać ludzi w błąd.
Ale głowy nie dam
Więc tak:Spark89 pisze: Po pierwsze: Czy masz programator ISP? Jeśli tak to jaki?
Po drugie: Z jakiego źródła chcesz taktować uC i jaką wartością częstotliwości? Czy to ma być kwarc zewnętrzny, RC, czy możne wewnętrzny generator?
Posiadam programator ISP (http://dybkowski.net/elka/ispprog.html), a uC ma być taktowny z zewnętrznego rezonatora o częstotliwości 8MHz.
Proszę Cię Spark89 o pomoc.
Ustaw proszę fuse bity tak jak to jest napisane w artykule https://elportal.pl/index.php?module=Co ... y&ceid=243 na takie wartości:Kamil 1 pisze:Posiadam programator ISP (http://dybkowski.net/elka/ispprog.html), a uC ma być taktowny z zewnętrznego rezonatora o częstotliwości 8MHz.
BOOTRST - 1
BOOTSZ1 - 1/0 (jeden lub zero) daj 0...
BOOTSZ2 - 1/0 ...i tu też 0
BODLEVEL - 0
BODEN - 0
WDTON - 1
RSTDISBL - 1
EESAVE - 1
CKSEL3...1 - 111
CKOPT - 1
CKSEL0 - 1
SUT1 - 0
SUT0 - 1
Jak nie możesz sobie poradzić z jakimkolwiek etapem zaprogramowania fusebitów to mów, pytaj... jak coś się będzie działo np. nie możesz zaprogramować uC też krzycz... na wszystko zwracaj uwagę i o wszystkim pisz...
no to wsadź te wartości do uC i odpal program, napisz jakie są efekty...
Wielkie dzięki Spark89 za odpowiedź.
Niestety dzisiaj ok. 11.00 bawiąc się fusebit-ami chyba zablokowałem ATmega8 (ustawiłem wszystkie CKSEL3...0 na 0). Próbowałem nawet do XTAL1 dołączyć zewnętrzny generator 1MHz ale to nic nie dało.
Spróbuję pozmieniać te fusebity na nowym uC (jak kupię).
[ Dodano: 2008-07-04, 21:52 ]
Uff... w porządku odblokowałem go, okazało się że zewnętrzny generator (1MHz) podpinałem do XTAL2 uC zamiast do XTAL1.
Co do tych fusebitów ustawiłem je tak jak napisałeś Spark89. Jednak co najdziwniejsze po kliknięciu na READ SIGNATURE wyskakują losowo 3 rodzaje napisów: CHIP LOCKED, ATmega8 (czyli go widzi) i NOT KNOWN. Nie wiem o co tu chodzi raz go widzi a raz nie.
A czytałem gdzieś że jeśli jest mowa że np. CKSEL1 ma być ustawiony na 0 to trzeba w programatorze miejsce CKSEL1 ustawić na 1. Może tu robię błąd?
Niestety dzisiaj ok. 11.00 bawiąc się fusebit-ami chyba zablokowałem ATmega8 (ustawiłem wszystkie CKSEL3...0 na 0). Próbowałem nawet do XTAL1 dołączyć zewnętrzny generator 1MHz ale to nic nie dało.
Spróbuję pozmieniać te fusebity na nowym uC (jak kupię).
[ Dodano: 2008-07-04, 21:52 ]
Uff... w porządku odblokowałem go, okazało się że zewnętrzny generator (1MHz) podpinałem do XTAL2 uC zamiast do XTAL1.
Co do tych fusebitów ustawiłem je tak jak napisałeś Spark89. Jednak co najdziwniejsze po kliknięciu na READ SIGNATURE wyskakują losowo 3 rodzaje napisów: CHIP LOCKED, ATmega8 (czyli go widzi) i NOT KNOWN. Nie wiem o co tu chodzi raz go widzi a raz nie.
A czytałem gdzieś że jeśli jest mowa że np. CKSEL1 ma być ustawiony na 0 to trzeba w programatorze miejsce CKSEL1 ustawić na 1. Może tu robię błąd?