Forum: Mikrocontroller und Digitale Elektronik AVR Attiny13 Assembler AD Wandler


von Benjamin B. (benbu)


Angehängte Dateien:

Lesenswert?

Hallo liebe Community,

Ich bin neu hier und hoffe auf die Rettung durch euch. :)

Ich habe ein Projekt (.TXT DATEI) mit einem AD Wandler aufgebaut.
Dabei soll das Programm folgenden Grundlegenden Ablauf haben:

Initialisierung
-> Wartezeit
-> Batteriespannung Kontrolle
-> Einstellung/Setting auslesen
-> | Set1 | Set2 | Set3 | Set4 | Set5 |
-> Einschalt
-> Ausschalt
-> wieder Batteriekontrolle ...


Es scheint alles zu funktionieren bis auf die letzten beiden Schritte.
Dort Soll der Controller die Spannung messen und einen MOSFET an den 
jeweiligen Schaltgrenzen an- (Einschalt) oder ausschalten (Ausschalt).
Dabei Rampt an dem Pin eine Spannung hoch. Er soll dann so lange in 
"Einschalt" bleiben, bis der Schwellwert aus dem Setting überschritten 
ist. Danach soll er zu "Ausschalt" weiter gehen und erst ausschalten, 
wenn die Spannung niedriger als im Setting definiert.

Komischerweise ist der AD- Wandler der gleiche Aufbau wie bei der 
Überprüfung der Batteriespannung. und da klappt es. Auch das Auslesen 
der Settings (auch AD Wandler) funktioniert.
Nur bei Ein- und Ausschalt geht es nicht.

Jetzt frage ich mich, ob ich irgendwo einen Fehler habe, den ich ich 
seit Wochen nicht finden kann.
+-----------
Fehlerbild:

Wenn ich die Spannung hoch rampe (0-VCC), schaltet er den PIN für den 
MOSFET nicht durch.
Wenn ich die Spannung bereits über dem Schwellwert anlege bevor der 
Controller an ist schaltet er den Pin für den MOSFET. Schaltet ihn aber 
nicht mehr aus wenn ich wieder runter rampe.

Ich habe auch schon mal eine Impuls auf einem Pin setzen lassen wenn er 
an bestimmten Stellen durch das Programm läuft. Dabei ist mir 
aufgefallen, dass er den Einschalt und Ausschalt Teil nicht als 
Schleifen durchläuft sondern immer nach einer Konvertierung wieder geht.

Ich hoffe ihr könnt mir helfen.
Danke schon mal im Voraus

von S. Landolt (Gast)


Lesenswert?

> in  r27,ADCH  ; einlesen des High-Teils
> in   r26,ADCL  ; einlesen des Low-Teils

Aus dem Datenblatt: "When ADCL is read, the ADC Data Register is not 
updated until ADCH is read. Consequently, if the result is left adjusted 
and no more than 8-bit precision is required, it is sufficient to read 
ADCH. Otherwise, ADCL must be read first, then ADCH."

von Benjamin B. (benbu)


Lesenswert?

Oh wie Krass. Danke Das habe ich noch nicht vorher gelesen.
Super. Ich werde das nachher (nach 15.00 Uhr) gleich ausprobieren.
Danke noch mal.

von Benjamin B. (benbu)


Lesenswert?

Also
Ich habe das jetzt gerade ausprobiert und es funktioniert wunderbar.
Vielen Dank noch mal. :)

von S. Landolt (Gast)


Lesenswert?

Freut mich, dass es der einzige Fehler war - und danke für die 
Rückmeldung, gibt es nicht immer.

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.