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
> Mein Code:
Soll das ne Verarschung sein? Kein Stack initialisiert, kein ret am Ende
vom Unterprogramm... Und das soll jemals gelaufen sein?
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
uff. Merke es erst jetzt. Dass ist ja ein anderes Programm. Aber damit geht es auch nicht mehr. Das Prog. war mal für einen Motorsteuerung gedacht.
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.