Laut Datasheet verfügt er über 4 ADCs... Dürfte also kein Problem sein...
angenommen ich nehme so einen Widerstand, der mit der Temperatur mehr Widerstand hat... Wie beschalte ich ihn, bzw. lese ich ihn dann aus?
Einfach die Spannung, die an einer normalen Pin anliegt auslesen geht nicht. Dazu musst du den Analog/Digital-Wandler benutzen (siehe: http://www.rn-wissen.de/index.php/ADC_(Avr) ). Da die ganz kleinen AVRs nur sehr wenige (wenn überhaupt) Pins haben, die man analog auslesen kann, habe ich dir empfohlen, einen größeren AVR zu nehmen.Wie kann man die Spannung, die an einem PIN anliegt, auslesen?
Gibt es dafür einen Befehl bzw. Gruppe von Befehlen?
Laut Datasheet verfügt er über 4 ADCs... Dürfte also kein Problem sein...
angenommen ich nehme so einen Widerstand, der mit der Temperatur mehr Widerstand hat... Wie beschalte ich ihn, bzw. lese ich ihn dann aus?
Dieser Widerstand heißt NTC-Widerstand, einfach das eine Ende an eine ADC-Pin anschließen, das andere an Masse und dann noch AVCC beschalten und wie es angesteuert wird kannst du bei diesem Lnk nachlesen.
Ok, danke
Das Anschließen scheint ja ziemlich einfach...
Aber auf der Seite steht ziemlich viel Quellcode, den ich kaum verstehe...
#include <avr/io.h>
#include <inttypes.h>
uint16_t readADC(uint8_t channel) {
uint8_t i;
uint16_t result = 0;
// Den ADC aktivieren und Teilungsfaktor auf 64 stellen
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
// Kanal des Multiplexers waehlen
// Interne Referenzspannung verwenden (also 2,56 V)
ADMUX = channel | (1<<REFS1) | (1<<REFS0);
// Den ADC initialisieren und einen sog. Dummyreadout machen
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
// Jetzt 3x die analoge Spannung and Kanal channel auslesen
// und dann Durchschnittswert ausrechnen.
for(i=0; i<3; i++) {
// Eine Wandlung
ADCSRA |= (1<<ADSC);
// Auf Ergebnis warten...
while(ADCSRA & (1<<ADSC));
result += ADCW;
}
// ADC wieder deaktivieren
ADCSRA &= ~(1<<ADEN);
result /= 3;
return result;
}
int main(void) {
uint16_t result = readADC(0); //Auslesen der analogen Spannungen an Pin 0,
// also ADC0. In result steht das Ergebnis.
return 0;
}
War das eine Frage? Ich würde dir raten, dich erst einmal mit einfacheren Dingen wie den grundlegenden Befehlen und dem Aufbau eines AVRs zu beschäftigen, um den Code zu verstehen. Ansonsten findest du im Internet genug Informationen.Aber auf der Seite steht ziemlich viel Quellcode, den ich kaum verstehe...
Ok, danke, werde mich mal nach leichteren (grundlegenderen) Programmen umschauen...
Auf jeden Fall danke für die Hilfe bis hierher...
Mfg
Hätte ne Frage:
Wenn ich zwischen Eingangspin und +Pol einen temperaturabhängigen Widerstand hänge, soll der Chip doch die Spannung auslesen, dadurch kann man die Temperatur ermitteln....
Wenn ich das jetzt aber mit dem Ohmschen Gesetz berachte, komme ich zu dem Schluss, dass die Spannung vor und hinter dem Widerstand gleich hoch ist, nur die Stromstärke variiert....
Nein die Stromstärke bleibt gleich, am Widerstand fällt jedoch um so mehr Spannung ab, um so größer er ist.
Aber man kann -wie gesagt- diese Spannung nur mit dem A/D-Wandler und einer entsprechenden ADCx-Pin auslesen.
Da dreht sich mein Kopf irgendwie im Kreis....
Angenommen ich habe 5V und 30 Ohm... Dann sollte doch hinter dem Widerstand ein Strom von 0,166 Ampere fließen...
0,166 Ampere mal 30 Ohm ist aber wieder 5 V.... Oder muss ich dann mit den Ohm der Leitung rechnen??
Du hast die Formel U=R*I. Wenn du die Spannung, die am Pin anliegt ausrechnen willst, machst du das mit dieser Formel (dazu musst du die Stromstärke messen und NICHT ausrechnen).
Lesezeichen