Hallo Leute,
Vielleicht übersehe ich hier etwas bei dem unten stehenden 
Programmcode.Der Timer0 von Atmega8 soll an PortB ein Rechtecksignal 
erzeugen. ich habe das programm mit avrstudio in den controller 
übertragen und an portB ein oscilloscope angeschlossen. das 
Rechecksignal erscheint für eine sehr kurze zeit auf dem schrimm aber 
dann geht es wieder auf low.
was meint Ihr, was ich als Anfenger hier die ganze zeit übersehe und 
nicht darauf kommen kann? wäre dankbar für den Tipp.
kaveh
interne Takt 1MHz. Board von myavr
.include"m8def.inc"
.ORG         OVF0addr
          rjmp  Timer_0
main:
          ldi    r16,0xff
          out    ddrb,r16
          ;-------------------
          ldi    r16,0b00000011
          out    TCCR0,r16
          ldi    r16,0b00000001
          out    TIMSK,r16
          ldi    r16,0
          sei
          ;---------------------
mainloop:      rjmp mainloop
Timer_0:      com     r16
          out    portb,r16
          reti
  Hallo,
das habe ich auch gerade gemacht( Siehe unten), aber es hat sich nicht 
geändert. es ist so, wenn ich das code jedesmal übertrage, dann 
erscheint das Signal und dann verschwindet. bin ziemlich ratlos.
.include"m8def.inc"
.ORG         OVF0addr
          rjmp  Timer_0
main:
          ldi    r16,high(ramend)
          out    sph,r16
          ldi    r16,low(ramend)
          out    spl,r16
          ;----------------------
          ldi    r16,0xff
          out    ddrb,r16
          ;-------------------
          ldi    r16,0b00000101
          out    TCCR0,r16
          ldi    r16,0b00000001
          out    TIMSK,r16
          ldi    r16,0
          sei
          ;---------------------
mainloop:      rjmp mainloop
Timer_0:      com     r16
          out    portb,r16
          reti
  Watchdog-Fuse noch an? AVR Fuses kontrollieren und ggf. zeigen Spannungsversorgung instabil und daher AVR instabil und RESET gefährdet? Schaltplan und/oder Aufbau zeigen, was am Port B Strom zieht. Statt kompletten Port B zu toggeln mal auf einen Pin konzentrieren.
Hi Kein 'rjmp main' auf Adresse $0000. Kein Stackpointer initialisiert. MfG Spess
Hallo,
Nun habe ich das Code etwas geändet(diesmal mit Grundgrüst) und sehe, 
dass es jetzt funktioniert aber erklären kann ich mir immer noch nicht 
ganz genau. kann sein?, dass die ORG OVF0addr bei dem Anfangscode das 
Problemm war? oder woran kann es liegen. die Stromversorgung ist in 
ordnung.
danke Kaveh
;+----------------------------------------------------------------------
;| Title    : myAVR Grundgerüst für ATmega8
;+----------------------------------------------------------------------
;| Funktion    : ...
;| Schaltung  : ...
;+----------------------------------------------------------------------
;| Prozessor  : ATmega8
;| Takt    : 3,6864 MHz
;| Sprache         : Assembler
;| Datum           : ...
;| Version         : ...
;| Autor           : ...
;+----------------------------------------------------------------------
.include  "m8def.inc"
;----------------------------------------------------------------------- 
-
;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
  rjmp  Timer_0  ;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
;----------------------------------------------------------------------- 
-
;Start, Power ON, Reset
;.include"m8def.inc"
;.ORG         OVF0addr
          ;rjmp  Timer_0
main:
          ldi    r16,high(ramend)
          out    sph,r16
          ldi    r16,low(ramend)
          out    spl,r16
          ;----------------------
           ldi     r16,0xff
           out    ddrb,r16
          ;-------------------
          ldi    r16,0b00000101
          out    TCCR0,r16
          ldi    r16,0b00000001
          out    TIMSK,r16
          ldi    r16,0
          sei
          ;---------------------
mainloop:      rjmp mainloop
Timer_0:      com     r16
          out    portb,r16
          reti
  Das hat spess53 im Prinzip schon gesagt: Dir fehlt der Sprung nach main.
Wenn Du den Controller einschaltest, beginnt er mit der 
Programmausführung an Adresse 0x0000. Dort steht zunächst nichts (0xff, 
leerer Flash-Speicher), bis irgendwann das "rjmp Timer_0" kommt. Er 
springt in den Interrupt-Handler (ohne im Interrupt-Modus zu sein), 
toggelt den Port (ohne daß er als Ausgang geschaltet ist, aktiviert also 
die internen Pull-Ups), und verlässt den Interrupt, was ihn vermutlich 
ins Nirvana befördert, weil weder Stack aufgesetzt ist, noch eine 
Rücksprungadresse bereit liegt (weil eben kein Interrupt stattfand).
Durch den eingefügten Sprung nach main ("rjmp main") zu Beginn Deines 
letzten Programms wird nun tatsächlich die Hauptfunktion ausgeführt. 
Davor war es schlicht und einfach irrelevant, was Du dort hingeschrieben 
hast, es wurde übersprungen.
Klassische Erkenntnis: kaum macht man's richtig und schon geht's. :-)
Gruß,
Felix
  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.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten