-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: AVR resettet sich selber... ??

  1. #1
    Murus
    Gast

    AVR resettet sich selber... ??

    Anzeige

    Hallo zusammen,

    Ich hab hier nen Mega8, mit 6MHz von einem Quarz getaktet.
    An einer gewissen Stelle des Programmcodes resettet sich die Mühle selber.... Das sollte sie aber nicht.
    Hier mal der Code von der Stelle, wo die Sache spinnt:

    T = 0

    Do

    If T = 8 Then
    B = A / 4
    D = 65534 - B
    C = A / 2
    E = 65534 - C

    Timer1 = D
    Z = 1
    G = 0
    End If

    If U = 8 Then
    Stop Timer1
    Acsr = &B01000000
    Cls
    Locate 1 , 1
    Lcd "Ende"
    End If


    Locate 2 , 1
    Lcd T
    Locate 2 , 5
    Lcd Z
    Locate 2 , 10
    Lcd G
    Locate 2 , 18
    Lcd U

    Loop

    Sobald T den Wert 8 annimt, geht Z auf 1, das kann ich am LCD sehen. Doch: Dann gehen wieder alle Werte auf 0. Und da T=0 vor dem Do-Loop steht, muss er ja fast einen Reset durchführen.....
    Falls T mal nicht den Wert 8 annimnt (zuwenig Signale vom Komparator), dann gehts etwa 1 Sekunde und alle Werte springen auf 0 Zurück.
    Bei Bedarf kann ich auch noch den ganzen Code posten.

    Was kann das sein? Der Reset-Pin hängt mit 10k an Vcc...
    Oder ist das ein Software-Problem?
    Soll ich das mit einem zweiten AVR testen?
    Hmm, wenn ich mein Programm im Sim laufen lasse, dann springt er korrekt nach dem T=8 in die Komparator-Routine. Bei diesem Return fliegt er wieder voll an den Anfang des Programms.... Reset. Warum?? Wie lässt sich das vermeiden? Auch anch dem Timer-Return vom Interrupt springt er wieder ganz an den Anfang und beginnt von Vorne....
    Häää, ich hatte dieses Problem noch nie..

    Hmm, nach dem If T=8 stellt er ja den Timer vor. Wenn er dann das nächste mal in den Timer-Interrupt geht, fällt die Sache im Sim zusammen. Er ordnet dann allen Varialben ihre höchst möglichen Werte zu...

    Hier die Timer-IRQ:
    Zeit:
    Timer1 = E

    If Z = 0 Then
    Return
    End If

    If G = 0 Then
    G = 1
    Return
    End If

    If G = 1 Then
    G = 0
    End If

    Return

    Irgendwo hier bricht der Sim und vermutlich auch der AVR zusammen... Nur:Wo?
    Herzlichen Gruss
    Mario

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Also nach dem Programmauszug würd ich sagen t wird nie was anderes als 0
    wenn ich das richtig lese
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Was kann das sein? Der Reset-Pin hängt mit 10k an Vcc...
    So nebenbei:
    Häng da noch nen kleinen Kerko (zb. 50-100nF) nach Masse drann.
    Damit ist er besser gegen Spikes geschützt.
    Gruß
    Ratber

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Für Interrupt-Betrieb braucht man wenigsten 64 Byte HWStack.
    Mit den Defaults
    HWStack 32
    SWStack 32
    kann das knapp werden
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Murus
    Gast
    Hmm, also ich hab schon viel "interruptintensivere" Programme laufen gehabt.
    Mit dem Befehl
    $Hwstack 128 und
    $swstack 128 gings auch net...

    Gibt es da sonst noch irgendwelche Speicher, die man vergrössern kann?
    Also ich find das irgendwie strub... Sowas hatte ich noch nie.. und mein Programm ist nicht sehr verrückt....


    T nimmt beim Komparatorinerrupt zu (eben: hier nicht der volle Code)
    Der Code sollte funktionieren...

    Hier ist er, für alle, die auf Nummer sicher gehen wollen:
    Code:
    $regfile = "m8def.dat"
    $crystal = 6000000
    $hwstack 128
    $swstack 128
    
    Config Lcd = 20 * 2
    Config Lcdpin = Pin , E = Portb.0 , Rs = Portd.4 , Db7 = Portd.3 , Db6 = Portd.2 , Db5 = Portd.1 , Db4 = Portd.0
    Cursor On
    
    
    
    Ddrd.7 = 0                                                  ' Komparator-Signaleingang
    
    Dim A As Word
    Dim B As Word
    Dim D As Word
    Dim C As Word
    Dim E As Word
    Dim T As Byte
    Dim G As Byte
    Dim Z As Byte
    Z = 0
    Dim U As Byte
    Dim I As Byte
    U = 0
    G = 0
    
    Dim X(40) As Byte
    
    
    Acsr = &B01001000
    On Aci Flankenwechsel
    Enable Interrupts
    
    On Timer1 Zeit
    Config Timer1 = Timer , Prescale = 64
    Start Timer1
    Enable Timer1
    
    
    T = 0
    
    Do
    
    If T = 8 Then
    B = A / 4
    D = 65534 - B
    C = A / 2
    E = 65534 - C
    
    Timer1 = D
    Z = 1
    G = 0
    End If
    
    If U = 8 Then
    Stop Timer1
    Acsr = &B01000000
    Cls
    Locate 1 , 1
    Lcd "Ende"
    End If
    
    
    Locate 2 , 1
    Lcd T
    Locate 2 , 5
    Lcd Z
    Locate 2 , 10
    Lcd G
    Locate 2 , 18
    Lcd U
    
    Loop
    
    Flankenwechsel:
    A = Timer1
    
    If Z = 0 Then
    Timer1 = 0
    Incr T
    End If
    
    If Z = 1 Then
    
    If G = 1 Then
    Incr U
    X(u) = Acsr.5
    End If
    If G = 0 Then
    Return
    End If
    
    
    End If
    
    
    
    
    Return
    
    Zeit:
    Timer1 = E
    
    If Z = 0 Then
    Return
    End If
    
    If G = 0 Then
    G = 1
    Return
    End If
    
    If G = 1 Then
    G = 0
    End If
    
    Return
    
    
    End
    Nach 8 Komparator-Interrupts wird der Timer voreingestellt.
    Das Ganze soll ein Empfänger für Manchester-Codierte Bytes werden, befindet sich noch arg in Entwicklung.

    ??

    Herzliche Grüsse
    Mario

  6. #6
    Murus
    Gast
    Ah, ich hab weiter detektiert!
    Der Komparator-Interrupt, der die Variable T hochzählen lässt, kommt von einer Photodiode.
    Wenn ich die Leuchtstofflampe über meinem Pult an/ausschalte, dann schnellt T sofort auf über 50 hoch.....
    Dort kamen also auch Störungen rein, die wird geflackert haben.....
    Nun denn: Lampe aus:
    Wenn ich die Schaltung anschalte, und dann zum ersten mal die Photodiode bestrahle, dann zählt t bis auf 7 hoch. Dann kommt komischerweise ein Reset.
    Dann werden automatisch alle Variablen wieder auf 0 gesetzt. Wenn ich jetzt die Photodiode wieder bestrahle, funktioniert alles wunderbar!
    Nur: wieso klappt das nicht schon beim ersten Versuch? Den HW/SW-Stack hab ich auf 128...
    Was könnte das sein?

  7. #7
    Murus
    Gast
    Hmm, hab den Code noch so erweitert, dass er mir das (korrekt) übertragene Byte anzeigt. Dies tut er, aber gleich darauf resettet er, denn es kommt wieder der "Startbildschirm"...

    Was ist da los? Ich vermute, es hat mit etwas AVR-technischem zu tun, denn mein Code funktioniert....

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich habe auch ein Testboard auf dem sich viele "Antennen" befinden. Immer wenn ich meine Schreibtischlampe einschalte gibt es aucheinen Reset.
    Mag es das sein?

  9. #9
    Murus
    Gast
    Es passiert eben nur das erste mal....
    Nachher kann ich beliebig oft durchlaufen lassen, er resettet nicht mehr....
    Nur nachdem er zum ersten mal T auf 7 gesetzt hat, resettet er...
    Und nachdem er das fertige Byte angezeigt hat, resettet er auch...
    Am Reset-Pin hängen eben die 10k und ein kleiner Kerko...

    Hmm, ab und zu spinnt auch das LCD... das zeigt dann ganz wirre Zeichen, die sich laufend ändern....

    Könnte auch mein Netzteil sein (symmetrische Versorgung für OPamps und der 7805) Wenn ich das einschalte, rauscht der Radio ganz leicht....

    Oh, wenn ich die Versorgungsspannung (5v) oszilliere, weiss ich , wieso der Radio rauscht....
    Da schwingts fröhlich rum.
    Ich häng da mal nen dicken Elko dran.
    Hmm, am Reset-Pin des AVR hab ich das gleiche fröhliche rumschwingen... Elko hilft net gross

    Was kann man da tun?

  10. #10
    Murus
    Gast
    Edit: Es ist die Schaltung, die spinnt! Häng ich eine Glühbirne ans Netzteil, rauscht garnix. Sobald die Schaltung Saft bekommt, rauschts im Radio...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •