Forum: Mikrocontroller und Digitale Elektronik Programm funktioniert nur auf bestimmten Microcontrollern


von Sebastian P. (whiterabbit)


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

von abcdefgh (Gast)


Lesenswert?

Fuses und Taktung richtig gesetzt bei allen Controllern?

von Peter II (Gast)


Lesenswert?

Sebastian P. schrieb:
> Natürlich ist das gesamte Programm viel länger, jedoch konnte ich das
> Problem hier ausmachen.

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

von Gast (Gast)


Lesenswert?

fehlt eventuell ein start timer0 ?

von Sebastian P. (whiterabbit)


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!

von Paul Baumann (Gast)


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

von Piep (Gast)


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.

von Sebastian P. (whiterabbit)


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?

von Thomas E. (thomase)


Lesenswert?

Sebastian P. schrieb:
> Da das Programm aber auf den
> ersten Beiden mit exakt denselben Einstellungen läuft
Welche Einstellungen sind denn das?

mfg.

von Gast (Gast)


Lesenswert?

schalte die LED doch einfach in der ISR an....wenn sie dann nicht 
angehen sollte, ist davon auszugehen, dass die isr nicht ausgeführt 
wird.

von Sebastian P. (whiterabbit)


Angehängte Dateien:

Lesenswert?

hier die Einstellungen

mfg

von Sebastian P. (whiterabbit)


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

von Peter II (Gast)


Lesenswert?

wird etwa die Timer-Clock aus den Netzspannung gewonnen?

von Hannes L. (hannes)


Lesenswert?

Wie sieht es mit den Abblock-Kondensatoren aus?

...

von Piep (Gast)


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.

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

von Volkmar D. (volkmar)


Lesenswert?

Wie hoch ist die Betriebsspannung am ATMega8 im Falle des 
Batteriebetriebs?

Du hast nur einen Satz Fuses gezeigt, ist dies bei allen 3 Prozessoren 
gleich?

von Hannes L. (hannes)


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.

...

von Thomas E. (thomase)


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.

von Piep (Gast)


Lesenswert?

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

Er hat nur geschrieben "mit Batterie", aber nicht welche. Wahrscheinlich 
werden wir das aber nicht mehr erfahren.

von Hannes L. (hannes)


Lesenswert?

Piep schrieb:
> Er hat nur geschrieben "mit Batterie", aber nicht welche. Wahrscheinlich
> werden wir das aber nicht mehr erfahren.

Naja, ich hatte vorausgesetzt, dass soviel Schmalz zwischen den Ohren 
vorhanden ist, dass es sinnvollerweise eine Li-Zelle, 3 Alkalizellen 
oder 4 NiCd- bzw. NiMH-Zellen sind.

;-)

...

von Sebastian P. (whiterabbit)


Lesenswert?

Es lag an einer leeren Batterie. Die Spannung war einfach zu gering. 
Eigentlich sollte sie 9V haben und mittlerweile hat sie irgendwas mit 
6,5, was offenbar nicht genug ist. Danke für eure Hilfe!!

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.