Forum: Mikrocontroller und Digitale Elektronik ATTiny43U ADC's auslesen


von Domi J. (uc_fritze)



Lesenswert?

Hallo Leute,

Ich beschäftige mich momentan mit einer LiPo-Akkuüberwachung - den 
Schaltplan könnt ihr im Anhang finden.

Wenn die Spannung einer Zelle unter 3,6V fällt und über 3,4V ist, soll 
eine LED aufleuchten (PB0 und PB1), ist die Spannung unterhalb von 3,4V 
und über 3,2V, dann soll der Summer (PB2) piepsen. Wenn die Spannung 
unterhalb von 3,2V ist, soll ein Signal weitergeleitet werden.

Ich habe das Programm bisher auf einem ATMega16 programmiert (dort hatte 
ich ein Testboard mit LED's um die Funktion zu programmieren) - dort 
klappt auch alles super.
Jetzt habe ich das Programm für den ATTiny43U umgeschrieben, aber es 
klappt nicht wie erhofft. Seit ein paar Tagen bin ich am herumschreiben 
und ausprobieren, aber es will einfach nicht klappen.

Die einzelnen ADC's funktionieren alleine (Programm nur mit ADC3 oder 
ADC2 oder ADC1). Gemeinsam klappt es allerdings nicht [kann der ATTiny 
das nicht? - beim ATMega hatte ich keine Probleme. Hab auch nur die 
Register umgeschrieben, an der Struktur hab ich eig nichts geändert]


Funktionserläuterung beim .c File:

ADC3 liest die Spannung zwischen GND und Zelle1 [0  -max 4,2V]
ADC2 liest die Spannung zwischen GND und Zelle2 [0 - max 8,4V]
ADC1 liest die Spannung zwischen GND und Zelle3 [0 - max 12,6V]

Der ADC-Wert von Zelle1 (z.B.) wird so multipliziert [mit dem 10 bit ADU 
+ evtl. Spannungsteiler bei Zelle2 und Zelle3)], dass sich eine Spannung 
in mV ergibt. Bei Zelle 2 und Zelle3 werden noch die anderen 
Zellspannungen subtrahiert, sodas wirklich nur die Zellenspannung übrig 
bleibt!

Diese Spannung durchläuft dann verschiedene IF-Bedingungen, wodurch ich 
dann feststellen kann, in welchem Bereich die Spanung liegt. Dies 
geschieht mit allen 3 Spannungen.

Die kleinste Spannung wird dann an das CASE weitergegeben, wo dann die 
Aktionen (LED, Summer, Signal) ausgeführt werden - in Abhängigkeit von 
der kleinsten Zellspannung.

Momentan summt der Summer wenn die Spannung EINER Zelle unterhalb von 
3,2V ist [dies hab ich aus Testgründen so gemacht]. Die restlichen 
Funktionen sind erstmal nicht so wichtig, da erstmal das Grundgerüst 
stehen soll, der Rest ist ja quasi analog dazu.


Es würde mich freuen, wenn sich jemand das Programm anschaun könnte. Ich 
zerbrech mir grade den Kopf und komm einfach nicht weiter :(

Liebe Grüße,
Domi

von Bernd S. (bernds1)


Lesenswert?

Was mir beim Überfliegen auffällt:

Die Zeile
1
ADC3_voltage = (((ADC_measu...
ist zweimal vorhanden. Das untere soll bestimmt ADC1 heißen.

Kommt bestimmt davon, daß in den Überschriften erst 1, dann 2 dann 3 
steht.
Und im Programm hast du erst 3, dann 2 und unten 1 stehen. Da ist ein 
Flüchtigkeitsfehler vorprogrammiert, wenn man sich nach den (falschen) 
Kommentaren richtet...

Ich weiß nicht, ob das alles ist, habs nur mal schnell überflogen.

von Domi J. (uc_fritze)


Lesenswert?

Hallo BerndS1,

danke, dass du dir Zeit genommen hast, um dir das Programm anzusehen! :D

Mit ADC1 hast du natürlich recht. Die ADC's sind von der Nummerierung 
her wirklich schlecht gewählt - auf sowas sollte ich beim nächsten 
Projekt achten.


Gestern ist die Platine leidern den Bach runtergegagenen, so kann ich 
momentan das Programm nicht testen - erst wieder am FR.

Was mir aber aufgefallen ist, wenn mehrere ADC's gleichzeitig laufen, 
dann verschieben sich die Bereiche. So kann es sein, dass Zelle1 
(Zellenspannung) bei 3,4V auslöst (sollte aber bei 3,2) und die andren 2 
Zelle weit über 4V (ebenfalls Zellenspannung) liegen - simuliert mit 
meheren Netzgeräten.

Mein Verdacht, dass es am subtrahieren mit den Werten ADC2_voltage bzw 
ADC3_voltage liegt, hat sich nicht bestätigt, da es mit fixen Werten 
auch nicht funktioniert hat.

LG
Domi

von MWS (Gast)


Lesenswert?

So löscht man keine Bits:
ADMUX |= (~(1<<REFS0));

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.