Forum: Mikrocontroller und Digitale Elektronik ATmega8 ist verstummt


von elips (Gast)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

> Mein Code:
Soll das ne Verarschung sein? Kein Stack initialisiert, kein ret am Ende 
vom Unterprogramm... Und das soll jemals gelaufen sein?

von Willi W. (williwacker)


Lesenswert?

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 ?

von elips (Gast)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

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.

von elips (Gast)


Lesenswert?

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

von elips (Gast)


Lesenswert?

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.

von elips (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.