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.