Liebe Forumgemeinde,
seit kurzer Zeit ist mein ATmega8 stumm geworden. Anfangs hab ich dem
nicht so viel Aufmerksamkeit beigemessen und wollte mich später darum
kümmern. Ich dachte an einen simplen Programmfehler. Nach mehrmaligen
Durchschauen, konnte ich aber keinen finden. Mein Code:
sbi UCSRB,3
sbi UCSRB,4
ldi r16,23 ;ATmega8 mit 3,6864MHz
out UBRRL,r16
mainloop: wdr
ldi r16,'X'
rcall send
rjmp mainloop
send: sbis UCSRA,5
rjmp send
out UDR,r16
hab schon mit retten veruscht, ging auch nicht. Nachdem ich ein wenig
rummprobiert hab, ist mir aufgefallen, dass er wirres Zeug sendet, wenn
man die Spannung vom ISP-Board weg nimmt und dann wieder drann legt. Ist
dieser Fehler jemanden bekannt, oder weiß jemand, ob ich den Controller
geschossen hab?
Vielen Dank
Johannes M. wrote:
>> Mein Code:> Soll das ne Verarschung sein? Kein Stack initialisiert, kein ret am Ende> vom Unterprogramm... Und das soll jemals gelaufen sein?
Vielleicht ist der Controller beleidigt ?
ne, hab nur das Wesentlich hingeschrieben.
das hab ich schon alles. Habe den Code nur auf einen anderen PC (keine
internet) und ich würde wahrscheinlich wegen des sturren Abschreibens
irgendwo einen Fehler mache.
main: ldi r16,lo8(RAMEND)
out SPL,r16
ldi r16,hi8(RAMEND)
out SPL,r16
sbi UCR,4
sbi UCR,3
....
den rest kennt ihr ja. Die Interrupts werden übersprungen. Es
funktioniert sonst alles, bis auf das senden von chars von uC zum PC.
Sogar das Senden vom PC zum uC hab ich erfolgreich getestet. Was müsst
ihr noch wissen?
Vielen Dank
Nun, da es ja Deinen Angaben zufolge bisher problemlos geklappt hat,
kann es ja vermutlich nicht am Code liegen, zumindest dann, wenn am
Programm an sich nichts geändert wurde. Der Fehler wird also
möglicherweise eher in der Hardware zu suchen sein.
hoffentlich ist es kein Hardwarefehler. Wenn ja, weiß jemand mehr
darüber?
Hab mir jetzt mal so ein Testprogramm geholt und draufgebrannt. Damit
funktionierts auch nicht:
;+----------------------------------------------------------------------
;| Title : myAVR Grundgerüst für ATmega8
;+----------------------------------------------------------------------
;| Funktion : ...
;| Schaltung : ...
;+----------------------------------------------------------------------
;| Prozessor : ATmega8
;| Takt : 3,6864 MHz
;| Sprache : Assembler
;| Datum : ...
;| Version : ...
;| Autor : ...
;+----------------------------------------------------------------------
.include "AVR.H"
;-----------------------------------------------------------------------
-
;Reset and Interrupt vector ;VNr. Beschreibung
rjmp main ;1 POWER ON RESET
reti ;2 Int0-Interrupt
reti ;3 Int1-Interrupt
reti ;4 TC2 Compare Match
reti ;5 TC2 Overflow
reti ;6 TC1 Capture
reti ;7 TC1 Compare Match A
reti ;8 TC1 Compare Match B
reti ;9 TC1 Overflow
reti ;10 TC0 Overflow
reti ;11 SPI, STC Serial Transfer Complete
reti ;12 UART Rx Complete
reti ;13 UART Data Register Empty
reti ;14 UART Tx Complete
reti ;15 ADC Conversion Complete
reti ;16 EEPROM Ready
reti ;17 Analog Comparator
reti ;18 TWI (I²C) Serial Interface
reti ;19 Store Program Memory Ready
;-----------------------------------------------------------------------
-
main: ldi r16,lo8(RAMEND)
out SPL,r16
ldi r16,hi8(RAMEND)
out SPH,r16
sbi UCR,4 ;UCR=UCSRB=0x0B RXEN=Bit4 RX aktivieren
sbi UCR,3 ;UCR=UCSRB=0x0B UDRE=Bit3 TX aktiv
ldi r16,23 ;Baudrate 9600 einstellen
out UBRRL,r16
sbi DDRB,1 ;PWM-Ausgang 1
sbi DDRB,2 ;PWM-Ausgang 2
ldi r16,0b10000000 ;r16 = Geschwindigkeit; 0x0 rückwärts
0xF forwärts
rcall initPWM
;-----------------------------------------------------------------------
-
mainloop: wdr
rcall wait
rcall ausgabe
rcall getChar
rcall putChar
cpi r19,'+' ;schneller
breq plus
cpi r19,'-' ;langsamer
breq minus
cpi r19,'s' ;starten
breq start
cpi r19,'e' ;ende
breq ende
rjmp mainloop
;----------------------------------
plus: cpi r16,0xFF
breq mainloop
inc r16
rjmp mainloop
;----------------------------------
minus: cpi r16,0x00
breq mainloop
dec r16
rjmp mainloop
;----------------------------------
start: cpi r16,0xFF
breq mainloop
inc r16
rcall wait
rjmp start
;----------------------------------
ende: rcall wait
cpi r16,0x80
brsh drueber
inc r16
rjmp ende
drueber: cpi r16,0x80
breq mainloop
dec r16
rjmp ende
;-----------------------------------------------------------------------
-
ausgabe: push r16
push r17
ldi r17,0
out OCR1AH,r17
out OCR1AL,r16
out OCR1BH,r17
out OCR1BL,r16
pop r17
pop r16
ret
;-----------------------------------------------------------------------
-
wait: push r16
push r17
ldi r16,0xFF
loop1: ldi r17,0xFF
loop2: dec r17
brne loop2
dec r16
brne loop1
pop r17
pop r16
ret
;-----------------------------------------------------------------------
-
initPWM: push r16
sbi PORTB,1
sbi PORTB,2
ldi r16,0b10110010
out TCCR1A,r16
ldi r16,0b00011001
out TCCR1B,r16
ldi r16,0b00000000
out ICR1H,r16
ldi r16,0b11111111
out ICR1L,r16
pop r16
ret
;-----------------------------------------------------------------------
-
putChar: sbis USR,5
rjmp putChar
out UDR,r19
ret
;-----------------------------------------------------------------------
-
getChar: sbis USR,7
rjmp getChar
in r19,UDR
ret
;-----------------------------------------------------------------------
-
Kann mir jemand helfen?
Vielen Dank
hab mir jetzt sogar einen neuen uC gekauft. Funktioniert aber immer noch
nicht. Für die Kommunikation verwende ich einen MAX 232N. Kann es sein,
dass ich den geschossen hab?