Programm funktioniert nur auf bestimmten Microcontrollern

OP #2401551
Lesenswert?

Schön guten Tag die Damen und Herren!

Ich habe mehrere Wochen an einem Programm(in Basic)für einen ATMega8 
geschrieben. Alles Prima. Der Test an einem zweiten ATMega8 ebenfalls. 
Nun ein dritter Microcontroller(der gleiche ATMega8) und es kommt wie es 
kommen musste, es funktioniert nichts. Da alles auf einer Uhr(habe 
Timer0 genommen) basiert, habe ich alles "Unnütze" aus dem Programm 
genommen und getestet, ob er denn überhaupt auf Sekunden reagiert:
'hier die Einstellungen für den Microcontroller
$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 8
$framesize = 24
'der Strom nachdem ein Taster gedrückt wurde an
Config Portd.0 = Output
      Portd.0 = 1
'eine LED konfigurieren
Led_a Alias Portd.2
   Config Portd.2 = Output
'der Timer konfiguriert
Config Timer0 = Timer , Prescale = 1024
On Timer0 Timer0_overflow
Enable Timer0
'Interrupts aktivieren
Enable Interrupts
'die Programmschleife
Do
   If Sekunden = 2 Then
      Toggle Led_a
   End If
Loop
'und der Interrupt
Timer0_overflow:
   Incr Zwanzigstel_sekunden2
      If Zwanzigstel_sekunden2 = 20 Then
         Incr Sekunden
         Zwanzigstel_sekunden2 = 0
      End If
Return

Natürlich ist das gesamte Programm viel länger, jedoch konnte ich das 
Problem hier ausmachen. Jemand eine Idee?

Lieben Dank im Voraus für die Hilfe
OP #2401564
Lesenswert?

>welches Problem denn, du hast nur geschrieben "es geht nichts" geht es
>auch etwas genauer - was geht denn nicht?

Im Programm selbst wird anfangs eine Pumpe angeschaltet und nach einer 
gewissen Zeit dann ausgeschaltet. Sie läuft auf dem dritten 
Microcontroller die gesamte Zeit.

>fehlt eventuell ein start timer0 ?

Kann ich mir nicht vorstellen, da das Programm auf den beiden Anderen 
astrein ohne eine start timer0 läuft.

>Fuses und Taktung richtig gesetzt bei allen Controllern?

Bin noch neu, deswegen weiß ich das nicht. Da das Programm aber auf den 
ersten Beiden mit exakt denselben Einstellungen läuft, sag ich einfach 
mal ja.

Danke schonmal für die Unterstüzung!
Gast #2401566
Lesenswert?

Ich denke, daß wenn die Sekunden 2 erreicht haben, LED_A nur einmal
eingeschaltet wird und dann nicht wieder aus. Die Sekunden werden nicht
wieder zurückgesetzt und laufen immer weiter hoch.

MfG Paul
Gast #2401572
Lesenswert?

Sebastian P. schrieb:
>>Fuses und Taktung richtig gesetzt bei allen Controllern?
>
> Bin noch neu, deswegen weiß ich das nicht. Da das Programm aber auf den
> ersten Beiden mit exakt denselben Einstellungen läuft, sag ich einfach
> mal ja.

Da du es nicht weist, kann die Antwort nur NEIN lauten. Daher erst mal 
die Fuses vergleichen.
OP #2401575
Lesenswert?

Habe jetzt mal eine Erweiterung geschrieben:

Declare Sub Anzeige

Do

...

call anzeige
wert = sekunden

...

loop

Sub Anzeige()

      Erste_zahl = wert / 100            'die zahl in drei zahlen 
aufteilen
      Rest = wert Mod 100
      Zweite_zahl = Rest / 10
      Dritte_zahl = Rest Mod 10

      If B = 0 Then                                         'led 1
         Taster_auto_1 = 0
         Taster_auto_2 = 1
         Taster_auto_3 = 1
         B = 1
         Zahl = Erste_zahl
      Elseif B = 1 Then                                     'led 2
         Taster_auto_1 = 1
         Taster_auto_2 = 0
         Taster_auto_3 = 1
         B = 2
         Zahl = Zweite_zahl
      Elseif B = 2 Then                                     'led 3
         Taster_auto_1 = 1
         Taster_auto_2 = 1
         Taster_auto_3 = 0
         B = 0
         Zahl = Dritte_zahl
      End If

      Portd = Portd Or &B11111110
      Portb = Portb Or &B00000001

      Select Case Zahl
         Case 0 : Portd = Portd And &B00000011
         Case 1 : Portd = Portd And &B11100111
         Case 2 : Portd = Portd And &B10010011
                  Portb = Portb And &B11111110
         Case 3 : Portd = Portd And &B11000011
                  Portb = Portb And &B11111110
         Case 4 : Portd = Portd And &B01100111
                  Portb = Portb And &B11111110
         Case 5 : Portd = Portd And &B01001011
                  Portb = Portb And &B11111110
         Case 6 : Portd = Portd And &B00001011
                  Portb = Portb And &B11111110
         Case 7 : Portd = Portd And &B11100011
         Case 8 : Portd = Portd And &B00000011
                  Portb = Portb And &B11111110
         Case 9 : Portd = Portd And &B01100011
                  Portb = Portb And &B11111110
      End Select
End Sub

der sub-befehl funktioniert. im programm sollen mir die sekunden 
angeziegt werden, er sagt die ganze zeit null, dh er zählt die sekunden 
nicht hoch. weiß jem warum?
OP #2401644
Lesenswert?

habe den Fehler gefunden, auch wenn es sehr unglaubwürdig klingt: Ist 
der Microcontroller mit Batterie betrieben funktioniert der Timer nicht. 
Fragt mich nicht wieso, aber habe das jetzt nach mehreren Tests 
herausgefunden. Sobald ich ihn an ein Netzteil anschließe läufts. Danke 
aber für die Hilfe :)

MfG
#2401834
Lesenswert?

Piep schrieb:
> In den Fuses ist Brown-out Detection bei 2,7V aktiviert. Da war die
> Spannung wohl darunter.

Also ich betreibe etliche AVRs mit BOD 2,7V an einer Lithium-Zelle und 
deren Timer laufen alle wie sie sollen.

Deshalb frage ich nochmal:
Sind alle erforderlichen Stützkondensatoren vorhanden???

Dies wären am ATMega8 je ein Keramik-C 100nF zwischen Vcc und GND sowie 
AVcc und AGND, jeweils möglichst dicht an den AVR-Pins. Wird der ADC 
benutzt, so sollte noch ein weiterer 100nF-Kerko zwischen Aref und AGND.

...
#2401851
Lesenswert?

Sebastian P. schrieb:
> habe den Fehler gefunden, auch wenn es sehr unglaubwürdig klingt: Ist
> der Microcontroller mit Batterie betrieben funktioniert der Timer nicht.

Sowas hatte ich mit einem Atmega48 auch schon. Wenn die Spannung zu weit 
abfällt und der Timer2 mit Uhrenquarz und 8MHz intern, den Controller 
aus dem Sleepmode holt, verzählt sich das Timer-Counter-Register. Mit 1 
MHz läuft das problemlos.
Hannes Lux schrieb:
> Also ich betreibe etliche AVRs mit BOD 2,7V an einer Lithium-Zelle und
> deren Timer laufen alle wie sie sollen.
Alle anderen Timer und sonstige Peripherie betrifft das nicht.
Nur die Konstellation Timer2, Uhrenquarz, Sleepmode. 1000 Mal debugged.
Der läuft einfach aus der Spezifikation raus. Spannung/Takt. Ansonsten 
habe ich auch nie Probleme gehabt bei 20MHz und 3V.

mfg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren