PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny 25 Problem



Unregistriert
21.02.2014, 12:09
Guten Tag habe ein großes Problem wollte mich mit dem ADC des Attiny 25 ausernandersetzen und komme da auf keinen grünen Zweig.
Hätte jemand ein Beispielprogramm welches die Spannung einer 9V Blockbatterie überprüft und mit 3 Leds anzeigt (High,Middle,Low-Zustand).

Bedanke mich im vorhinein für eure Hilfe

Bumbum
21.02.2014, 17:32
Hallo,

ich kann dir mit einem Code-Ausschnitt aus einem Tiny25-Programm von mir weiterhelfen. Dort frage ich den ADC regelmäßig via Interrupt ab. Alles weitere wirst du schon schaffen.

Zunächst brauchst du aber in Hardware erst mal einen Spannungsteiler, der dir die 9V am ADC-Eingang runterrteilt auf < Aref. Ich verwende in meinem Code die 1,1V interene Aref. Wenn du das übernimmst solltest du die 9V auf ca. 1V teilen.

Hier der Code:



volatile U16 ADC_value = 0;

ISR(ADC_vect) // ADC-Wert fertig umgewandelt:
{
ADC_value = ADCW;
ADCSRA = (1<<ADSC) | (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0)| (1<<ADIE); // ADC-Umwandlung erneut starten
}

int main(void)
{
DDRB = 0b00000001; // IOs konfigurieren
PORTB = 0b00000000;

ADMUX = (1<<REFS1) | (1<<MUX1) | (1<<MUX0); // ADC konfigurieren: interne Referenz 1,1V und Eingang ADC3
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0) | (1<<ADIE); // Prescaller FCPU : 8 und Interrupt bei fertiger Umwandlung

sei (); // Interrupts aktivieren
ADCSRA = (1<<ADSC) | (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0)| (1<<ADIE); // ADC-Umwandlung starten

while (1)
{
// dein Programm...
// z.B.: if (ADV_value > xxx)
}
}


Viel Spaß beim einarbeiten und lernen!

Viele Grüße
Andreas

- - - Aktualisiert - - -

...was vielleicht noch als Info fehlt: ADC_value ist die Spannung in 1/1024el von Aref. Also 0V = 0 und 1,1V bzw. Aref = 1023.