Bootloader dla ATMEGA8
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
Bootloader dla ATMEGA8
Witam,
Potrzebuje bootloadera o jak najmniejszym rozmiarze czyli do 256B. Na necie nie znalazłem takiego "chudego", a przynajmniej na polskich stronach. Przepisałem z książki, ale niestety nie działa:( Pojawiają się błędy przy transmisji. Nie znam dobrze asemblera i nie mogę znaleźc błędów w programie. Bootloader przepisany z książki jest poniżej w załączniku.
Potrzebuje bootloadera o jak najmniejszym rozmiarze czyli do 256B. Na necie nie znalazłem takiego "chudego", a przynajmniej na polskich stronach. Przepisałem z książki, ale niestety nie działa:( Pojawiają się błędy przy transmisji. Nie znam dobrze asemblera i nie mogę znaleźc błędów w programie. Bootloader przepisany z książki jest poniżej w załączniku.
- Załączniki
-
- bootloader.rar
- (1.08 KiB) Pobrany 606 razy
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
Tak wewnętrzny 1MHz. Transmisje rs232 może prowadzic normalnie przy tym kwarcu. Zarówno w języku C jak i w bascomie z gotowymi funkcjami print nie było problemu. A w tym bootloaderze ponizej jest tak, że na terminalu bascoma wyświetla się prawidłowo "rs232ok" oraz po naciśnieciu przycisku "bootloader" i zaraz potem dwa dziwne znaczki zamiast "B?". Mimo tego próbowałem wrzucic program. Przy każdej zapisywanej lini na terminal powinien wędrowac "?" Nie było nic. Do flash'a tez nic się nie zapisało.
-
ZbeeGin
Przeanalizowałem prolog bootloadera:
Spróbuj usunąć ten zaznaczony fragment, bo on ustawia nową prędkość transmisji równą 3289 bodów. Ale lepiej będzie zmienić to na:
Który ustawi prędkość taką samą jak podaną w dyrektywie $BAUD, czyli 4807 bodów.
Wyprzedzając Twoje pytanie to $BAUD także ustawi 4807 gdyż przy 1MHz nie da się dokładnie ustawić każdej standardowej prędkości transmisji.
Kod: Zaznacz cały
_b_start:
ldi t, re_h
!out SPH, t
ldi t, re_l
!out SPL, t 'ustaw adres stosu na $045F
ldi t, $00 'normalna transmisja, bez trybu multicpu
!out UCSRA, t
ldi t, $18 'przerwania USART wyłączone, transmisja włączona w obie strony
!out UCSRB, t
ldi t, $86 'praca asynchroniczna, bez parzystości, 1 bit stopu, 8-bitów danych
!out UCSRC, t
' ----------------------------------------
ldi t, $00 'ustaw UBRRH (bity 11..8 jako 0000)
!out $20 ,t
ldi t, $12 'ustaw UBRRL (bity 7..0)
!out $09, t
' ----------------------------------------Kod: Zaznacz cały
' ----------------------------------------
ldi t, $00 'ustaw UBRRH (bity 11..8 UBRR)
!out $20 ,t
ldi t, $0c 'ustaw UBRRL (bity 7..0 UBRR)
!out $09, t
' ----------------------------------------
Wyprzedzając Twoje pytanie to $BAUD także ustawi 4807 gdyż przy 1MHz nie da się dokładnie ustawić każdej standardowej prędkości transmisji.
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
Wielkie dzięki:)
Taki malutki błędzik, że nie zauważyłem. $0c=12. Zapomniałem zamienic dec na hex.
Dzisiaj już nie sprawdze, jutro dam znac czy działa, pozdro.
[ Dodano: 2007-08-19, 10:21 ]
Niestety, nie pomaga, zamiast dziwnych znaczków wyświetla ...jeszcze dziwniejsze. Może cos w ustawieniach nie tak?
Taki malutki błędzik, że nie zauważyłem. $0c=12. Zapomniałem zamienic dec na hex.
Dzisiaj już nie sprawdze, jutro dam znac czy działa, pozdro.
[ Dodano: 2007-08-19, 10:21 ]
Niestety, nie pomaga, zamiast dziwnych znaczków wyświetla ...jeszcze dziwniejsze. Może cos w ustawieniach nie tak?
-
ZbeeGin
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
Nie ma opcji none:/
A oto co wyświetla:
A oto co wyświetla:
Kod: Zaznacz cały
rs232ok
bootloaderCá-
ZbeeGin
- Aro
- Użytkownik
- Posty: 677
- Rejestracja: 30 paź 2006, 18:49
- Lokalizacja: Świerczyniec | Wrocław
- Kontakt:
Tak, wtedy nic sie nie wyświetla poza napisami "rs232" i "bootloader". Ale to i tak musi tam byc, inaczej trzebaby w każdej wczytywanej aplikacji to ustawiac. Oryginalnie było UBRRH i UBRRL, ale kompilator tego nie trawił więc zmieniłem na $20 i $09. Poszukałem tego w pliku hex i wygląda wporządku.
[ Dodano: 2007-08-20, 21:20 ]
A ksiązka to "Programowanie mikrokontrolerów AVR w jezyku Bascom" Marcina Wiązani. Autor pisze że jest zmodyfikowana wersja bootloadera dla ATMEGA8 z pakietu Bascom. Ja w swoim bascomie znalazłem tylko uniwersalny plik boot, ale zajmuje trochę za dużo miejsca.
[ Dodano: 2007-08-20, 21:20 ]
A ksiązka to "Programowanie mikrokontrolerów AVR w jezyku Bascom" Marcina Wiązani. Autor pisze że jest zmodyfikowana wersja bootloadera dla ATMEGA8 z pakietu Bascom. Ja w swoim bascomie znalazłem tylko uniwersalny plik boot, ale zajmuje trochę za dużo miejsca.
-
ZbeeGin
W definicji z BASCOMa jest:Aro pisze:Oryginalnie było UBRRH i UBRRL, ale kompilator tego nie trawił więc zmieniłem na $20 i $09.
Muszę jeszcze raz przeanalizować ten kod. Coś mi się w nim nie podoba. Dziwne jest odbieranie jednej linii HEX, tak jakby o czymś programista zapomniał...UBRRH =$20 ; Note! UCSRC equals UBRRH
UBRRHI =$20
(...)
UDR =$0c
UCSRA =$0b
USR =$0b
UCSRB =$0a
UCR =$0a
UCSRC =$20 ; Note! UCSRC equals UBRRH
UBRRL =$09
Po co się męczyć ? Ostatnio znalazłem bootloadera przez usb na atmege8. Oto adres:
http://www.fischl.de/avrusbboot/
http://www.fischl.de/avrusbboot/
-
ZbeeGin
Aro. Kupiłem sobie dziś ATMega8 (ostatni poszedł we właściwe ręce
) i przetestuje tego bootloadera. Nie wiem czy dziś jeszcze zdążę, bo w stykówce mam inny układzik (ATmega88 i boje z PWM).
W symulatorze z BASCOM-a wszystko wygląda prawie idealnie. Zgłasza się program i bootloader. Jeśli ręcznie wpiszę jedną linię hex to zostanie ona wpisana do SRAM i na tym niestety kończą się możliwości symulatora
.
[ Dodano: 2007-08-22, 19:47 ]
Przetesotowałem. Twój bootloader też u Mnie nie działa. Ale problem jest większy: także bootloader Marcina Wiązani u mnie nie działa! Choć wysztko skonfigurowałem wg zaleceń z książki.
W symulatorze z BASCOM-a wszystko wygląda prawie idealnie. Zgłasza się program i bootloader. Jeśli ręcznie wpiszę jedną linię hex to zostanie ona wpisana do SRAM i na tym niestety kończą się możliwości symulatora
[ Dodano: 2007-08-22, 19:47 ]
Przetesotowałem. Twój bootloader też u Mnie nie działa. Ale problem jest większy: także bootloader Marcina Wiązani u mnie nie działa! Choć wysztko skonfigurowałem wg zaleceń z książki.
-
ZbeeGin
Muszę w weekend spróbować odpalić UART z Mega8 z asemblera. Być może znajdę rozwiązanie tej zagadki, a przypuszczam, że to wszystko wina jego re-konfiguracji.
Jeszcze jednego nie sprawdziłem. Zabezpieczenia pamięci gdzie znajduje się bootloader. Nie dałem tam żadnych restrykcji, a nie jest wykluczone, że tutaj też może leżeć wina.
Jeszcze jednego nie sprawdziłem. Zabezpieczenia pamięci gdzie znajduje się bootloader. Nie dałem tam żadnych restrykcji, a nie jest wykluczone, że tutaj też może leżeć wina.
W oryginalnym programie 8_33.BAS są kometarze...Aro pisze:tylko jak na to patrze to nie wiem o co w tym biega