mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm hängt ...


Autor: frank müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe folgendes Problem :

Ich lasse eine Led mit etwa 1Hz blinken, klappt ca. 3-4 Minuten
wunderbar, aber danach hängt sich das Programm auf....

Ich habe den Watchdog Timer nicht gesetzt ... (auch sonst nichts)

Muss ich bei einer Endlosschleife etwas spezielles beachten ?

MFG Frank

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Fehler ist in der 4. Zeile Deines Programms !

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jep, mit Strg-A und danach einem ENTF bist du das Problem los.

Autor: Lightning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Frank
Das kann sein, vieleicht auch in der 5. Zeile | Zeichen 3-7 :-)

@Simon Küppers
Das ist natürlich eine Lösung oder...

@frank müller
Wie wärs wenn du mal den code posten würdest ???

Aber wenn du willst können wir ja weiterhin ins
"Blaue" raten ;D


Mfg.
~ Lightning

Autor: Frank Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
;*****************************************
.nolist
.include "tn26def.inc"
.list
;*******************************************
;********************************************
RJMP RESET ; RESET:
RETI ; EXT_INTO
RETI ; PIN_CHANGE
RETI ; TIM1_CMP1A
RETI ; TIM1_CMP1B
RETI ; TIM1_OVF
RETI ; TIM0_OVF
RETI ; USI_STRT
RETI ; USI_OVF
RETI ; EE_RDY
RETI ; ANA_COMP
RETI ; ADC
;******************************************
RESET:
ldi r16, RAMEND
out SP , r16 ; Stackpointer init

ldi r16 ,0b00000111  ; I/O init (PortA)
out DDRA ,r16
ldi r16 , 0b11111010 ; I/O init (PortB)
out DDRB , r16 ;


sei ; interrupts allowed globally

sbi PortB,3 ; Test of programm init (unnecessary)

;*****************************************************
;**********************; Endless
GO: ; LOOP for process flow simulation
sbi PortA, 2 ; LED ON
cbi PortB, 6
ldi work , 5
BACK: INC r0
BRNE BACK
INC r1
BRNE BACK
DEC work
BRNE BACK
cbi PortA, 2 ; LED OFF
cbi PortB, 6
ldi work , 5
LACK: INC r0
BRNE LACK
INC r1
BRNE LACK
DEC work
BRNE LACK
RJMP GO ; the switching has about 1 HZ frequency
;***********************; Endless (8 MHz clock frequency)

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Güte, gerade mal die ersten Gehversuche und schon müssens
englische Kommentare sein.
Es könnte ja jemand von MS entdecken und beeindruckt sein ;-)
Nur mal so am Rande.

Da Du keinen Interrupt verwendest und Dein Programm eigenlich nichts
macht als einen Pin Ein- und Auszuschalten und 2 schleifen  durchlaufen
werden kann man sich nicht vorstellen an was es liegen könnte.
Würde an Deiner Stelle die Schaltung prüfen ob Du auch nen
Vorwiderstand vor der/den LED/s geschaltet hast oder ob irgend wo
anders zu viel Strom fließt bis alles zusammen bricht (Ampermeter
zwischenhängen).

MfG
Andi

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eventuell kannst Du auf den Reset über einen 4,7KOhm-Widerstand 5V legen
um Störungen an den Reset-Pin zu vermeiden.

MfG
Andi

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für was ist eigentlich das 2-fache "cbi PortB,6"?
Hängt da vielleicht was drann?

MfG
Andi

Autor: Colonel Sandfurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum eigentlich "sei", wenn keine Interrupts verwendet werden. Wer
oder was ist übrigens "work"?

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, stimmt, hatte das "sei" zuerst übersehen, also wozu bei lauter
"RETI"´s?
Ich denke mal, "work" ist r16, benutzen einige hier, allerdings fehlt
das ".def" dafür.

MfG
Andi

Autor: Colonel Sandfurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tschuldigung, F5 gedrückt und schon ist so ein Mist passiert.

Autor: Lightning (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@Frank Müller
Also ich hab das progreamm da von dir
mal in meinen Mega8 gebrannt, das funzt
aber. Habs zu testzwecken 15min
laufen lassen (Hatte grad nix Anderes zu tun :D )
keine fehler nix...

Ich hab da mal so n Kauderwelsch Programm gemacht
da kannst n bisschen rummexperimentieren.
(Habe grad immernoch nix Anderes zu tun :D)

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

wait1s:    ;Eine Schleife die die wit_01s Schleife "loop" mal
ausführt.
ldi loop, 10 ;Loop muss 10 sein denn 10*0.1(wait_01s) = ???? -->
Rischtisch !!! 1

wt1s_0:     ;Schleifeninterne sprungmarke (Fachchinesisch :D)

dec loop   ;loop um1 verringern
breq next1    ;Wenn loop = 0 springe zu next1 und damit aus der Schleife
raus.
rjmp wt1s_0

next1:
ret

Kann da irgend wie keinen Aufruf von wait_01s finden.

Übrigens: Eine Pause von 0,1 Sekunden läßt sich auch wie folgt machen:

wait_01s:  ;Eine Schleife die eine Pause von 0.1sek (bei 8Mhz) bewirkt.
      ldi r24,low(50000)
      ldi r25,high(50000)
wt_0:  rcall wt_1          ;    7  rcall (4) + ret (3) = 7
       nop                 ; +  1
       sbiw r25:r24,0      ; +  2
       sbiw r25:r24,0      ; +  2
       sbiw r25:r24,1      ; +  2
      brne wt_0            ; +  2
wt_1: ret                  ; = 16 * 50000 = 800000 Takte = 0.1 Sek.

MfG
Andi

Autor: Lightning (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andi K.

Wooops !!! naja war ja auch ein
"Kauderwelsch" Programm, aber danke
für die info werd das gleich mal nachtragen.

hmmmm... deine Lösung von ner Schleife
ist gut, wirklich nicht schlecht.

MfG
~ Lightning

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein Beispiel für Pausen bis zu 4.294.967.296 µ-Sekunden.
Das sind max. 4294,96 Sekunden oder 1 Stunde, 11 Minuten und fast 35
Sekunden.
Die Sub zählt mit 4 Register, also 32 Bit.
Aufruf erfolgt mit dem Macro "CallWait µS-Zeit".
Also für 1 Sekunde gibt man 1000000 µS an.
In der Konstante "AVRTakt" gibt man die Freauenz des AVR in MHz an.

.equ AVRTakt=8             ;Takt des AVR in MHz
.macro CallWait
      ldi r22,byte1(@0*AVRTakt/8-2)
      ldi r23,byte2(@0*AVRTakt/8-2)
      ldi r24,byte3(@0*AVRTakt/8-2)
      ldi r25,byte4(@0*AVRTakt/8-2)
      rcall wait
.endm

      CallWait 1000000

wait:  ;Eine Schleife die eine Pause von n µS bewirkt.
wt_0:  sbiw r25:r24,0      ;    2  Hat keine Auswirkung auf die Reg.
       subi r22,1          ; +  1
       sbci r23,0          ; +  1
       sbci r24,0          ; +  1
       sbci r25,0          ; +  1
      brne wt_0            ; +  2
      sbiw r25:r24,0
      sbiw r25:r24,0
      nop
      ret

Irgendwie habe ich wohl auch nix anderes zu tun, obwohl eigentlich
schon aber keine Lust ;-)

MfG
Andi

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleiner Fehler am Ende der Sub.
Da gehören 10 Takte hin und nicht 9 da man auf 17 Takte inkl. Ende der
Sub und Vorladen der Register im Macro kommen muß da das letzte BRNE
nur 1 Takt benötigt statt 2.

wait:  ;Eine Schleife die eine Pause von n µS bewirkt.
wt_0:  sbiw r25:r24,0      ;    2  Hat keine Auswirkung auf die Reg.
       subi r22,1          ; +  1
       sbci r23,0          ; +  1
       sbci r24,0          ; +  1
       sbci r25,0          ; +  1
      brne wt_0            ; +  2
      sbiw r25:r24,0
      sbiw r25:r24,0
      sbiw r25:r24,0
      ret

MfG
Andi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.