Witam wszystkich.
Jestem początkującym programistą mikrokontrolerów. W miarę postępu edukacyjnego z AVR staram się wyznaczać sobie coraz to trudniejsze zadania. W końcu wymyśliłem sobie coś, z czym nie potrafię sobie poradzić.
Korzystam z makiety mod_avr_2 (pdf dostępny w zamieszczonym linku)
Moduł uruchomieniowy Atmega 2
Program napisany w asemblerze w AVR studio 4.18
Do wgrania napisanego programu korzystam z programu MegaLoad.net.
Ustawiam ścieżkę pliku hex do flasha i eeprom (zgodnie z instrukcją makiety), ustawiam odpowiedni port UBS i prędkość 57600bps. Program się wczytuje.
A teraz, co ma robić program. Naciskając odpowiedni przycisk zostaje zaświecona odpowiednia sekwencja podłączonych diod.
Przyciski są podłączone pod portA, na wyjście uC podłączone 8 diod.
Kod źródłowy:
Symulacja działa tak, jak sobie to wymyśliłem. Naciskam odpowiedni przycisk podłączony do portu A , a na port B zostaje wysłana odpowiednia sekwencja zapalająca diody przypisana odpowiedniemu przyciskowi. Po puszczeniu przycisku diody gasną.
Po wczytaniu programu do uC świecą (i nie wiem dlaczego) następujące diody: 01100110 (kombinacja2) i odczytana zostaje kombinacja3, czyli po wciśnięciu przycisku 2 (bit 6 portu A). Reszta nie działa
Moje podejrzenia:
1. Mój uC ma oznaczenie "Atmel Atmega32 16PU 1019D". W instrukcji napisane, że to Atmega16. Czy możliwe, że korzystam ze złych bibliotek? Do tej pory wszystko co napisałem działało.
2.Błąd w kodzie programu:
a)źle zdefiniowane porty A i B,
b)błąd w strukturze programu,
c) czegoś brakuje?
Przepraszam, że taki długi post, ale chciałem przekazać jak najwięcej info. Strasznie się zaciąłem na ten program. Chcę to zrobić i wyznaczać sobie nowe zadania :p
Jestem początkującym programistą mikrokontrolerów. W miarę postępu edukacyjnego z AVR staram się wyznaczać sobie coraz to trudniejsze zadania. W końcu wymyśliłem sobie coś, z czym nie potrafię sobie poradzić.
Korzystam z makiety mod_avr_2 (pdf dostępny w zamieszczonym linku)
Moduł uruchomieniowy Atmega 2
Program napisany w asemblerze w AVR studio 4.18
Do wgrania napisanego programu korzystam z programu MegaLoad.net.
Ustawiam ścieżkę pliku hex do flasha i eeprom (zgodnie z instrukcją makiety), ustawiam odpowiedni port UBS i prędkość 57600bps. Program się wczytuje.
A teraz, co ma robić program. Naciskając odpowiedni przycisk zostaje zaświecona odpowiednia sekwencja podłączonych diod.
Przyciski są podłączone pod portA, na wyjście uC podłączone 8 diod.
Kod źródłowy:
.include"m16def.inc"
.cseg
.org 0
.def acc=r16
ldi acc,HIGH(RAMEND) ; Definicja stosu
out SPH,acc
ldi acc,LOW(RAMEND)
out SPL,acc
ldi acc,0b00000000 ;wszystkie bity jako wejscie
out DDRA,acc
ldi acc,0b11111111 ;wszystkie wejscia w stanie wysokim
out PORTA,acc
ldi acc,0b11111111 ;wszystkie bity jako wyjscia
out DDRB, acc
;ldi acc,0b11111111 ;wszystkie diody wylaczone
;out PORTB,acc
Odczyt:
in acc,PINA ;odczyt stanu przyciskow
andi acc,0b10000000
brne Kombinacja1
in acc,PINA ;odczyt stanu przyciskow
andi acc,0b01000000
brne Kombinacja2
in acc,PINA ;odczyt stanu przyciskow
andi acc,0b00100000
brne Kombinacja3
in acc,PINA ;odczyt stanu przyciskow
andi acc,0b00010000
brne Kombinacja4
ldi acc,0b00000000
out PortB,acc
rjmp Odczyt
Kombinacja1:
ldi acc,0b00001111
out PortB,acc
rjmp Odczyt
Kombinacja2:
ldi acc,0b10011001
out PortB,acc
rjmp Odczyt
Kombinacja3:
ldi acc,0b11001100
out PortB,acc
rjmp Odczyt
Kombinacja4:
ldi acc,0b01010101
out PortB,acc
rjmp Odczyt
.exit
Symulacja działa tak, jak sobie to wymyśliłem. Naciskam odpowiedni przycisk podłączony do portu A , a na port B zostaje wysłana odpowiednia sekwencja zapalająca diody przypisana odpowiedniemu przyciskowi. Po puszczeniu przycisku diody gasną.
Po wczytaniu programu do uC świecą (i nie wiem dlaczego) następujące diody: 01100110 (kombinacja2) i odczytana zostaje kombinacja3, czyli po wciśnięciu przycisku 2 (bit 6 portu A). Reszta nie działa
Moje podejrzenia:
1. Mój uC ma oznaczenie "Atmel Atmega32 16PU 1019D". W instrukcji napisane, że to Atmega16. Czy możliwe, że korzystam ze złych bibliotek? Do tej pory wszystko co napisałem działało.
2.Błąd w kodzie programu:
a)źle zdefiniowane porty A i B,
b)błąd w strukturze programu,
c) czegoś brakuje?
Przepraszam, że taki długi post, ale chciałem przekazać jak najwięcej info. Strasznie się zaciąłem na ten program. Chcę to zrobić i wyznaczać sobie nowe zadania :p
