Teslafan
03.11.2010, 20:12
Servus,
hab vor zwei Tagen mein Pollin Board zusammen gelötet und will mich jetzt mit voller Wucht ins AVR getümmel werfen :)
Jetzt steh ich jedoch vor ein paar kleinen Problemen :(
Hab momentan nen ATMega 32 drauf.
Will mit meinem Labornetzteil mal auf die ADC Eingänge gehen und da gehts schon los ...
- Der Pluspol kommt doch auf z.B. PC0 und der Minus vom Netzteil auf GND vom AVR?
- Ich will intern den AVCC auf AREF schalten, hab bei meinem Board auf AVCC 5V anliegen, das bedeutet das ich theoretisch auch mit meinem Labornetzteil auf max. 5V gehen darf oder?
- Muss zu Testzwecken der 10nF Kondensator zum glätten dazwischen geschaltet werden oder kann man den auch mal weg lassen?
Hab vor ersteinmal dieses C-Programm aufzuspielen um das ganze zu testen:
#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;
}
Kenn mich noch nicht so gut in C aus von daher noch meine letzte wirklich dumme Frage...
- Ich wandel das C-Prog in AVRStudio in ne Hex. um und übertrage das ganze dann mit PonyProg, wie kann ich da ein Result sehen? Wenn dies nicht möglich ist, ab welchem Teil des Programms kann ich z.B. Leuchtdioden leuchten lassen wenn eine bestimmte Spannung erreicht ist? Normalerweise nach "int main (void)" so das ich z.b. eine LED anschalte wenn der wert 512 erricht ist alsp bei 2,5V.
Ich danke euch allen schon mal im vorraus, ich weiß das sind echt blöde fragen aber ich hab die letzten Tage ein Lauflicht mit delay geschrieben und will jetzt auch mal was aufregenderes machen.
Gruß Andi
hab vor zwei Tagen mein Pollin Board zusammen gelötet und will mich jetzt mit voller Wucht ins AVR getümmel werfen :)
Jetzt steh ich jedoch vor ein paar kleinen Problemen :(
Hab momentan nen ATMega 32 drauf.
Will mit meinem Labornetzteil mal auf die ADC Eingänge gehen und da gehts schon los ...
- Der Pluspol kommt doch auf z.B. PC0 und der Minus vom Netzteil auf GND vom AVR?
- Ich will intern den AVCC auf AREF schalten, hab bei meinem Board auf AVCC 5V anliegen, das bedeutet das ich theoretisch auch mit meinem Labornetzteil auf max. 5V gehen darf oder?
- Muss zu Testzwecken der 10nF Kondensator zum glätten dazwischen geschaltet werden oder kann man den auch mal weg lassen?
Hab vor ersteinmal dieses C-Programm aufzuspielen um das ganze zu testen:
#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;
}
Kenn mich noch nicht so gut in C aus von daher noch meine letzte wirklich dumme Frage...
- Ich wandel das C-Prog in AVRStudio in ne Hex. um und übertrage das ganze dann mit PonyProg, wie kann ich da ein Result sehen? Wenn dies nicht möglich ist, ab welchem Teil des Programms kann ich z.B. Leuchtdioden leuchten lassen wenn eine bestimmte Spannung erreicht ist? Normalerweise nach "int main (void)" so das ich z.b. eine LED anschalte wenn der wert 512 erricht ist alsp bei 2,5V.
Ich danke euch allen schon mal im vorraus, ich weiß das sind echt blöde fragen aber ich hab die letzten Tage ein Lauflicht mit delay geschrieben und will jetzt auch mal was aufregenderes machen.
Gruß Andi