@Gock
Ich glaube hiermit habe ich das selbe geschrieben (Idee hab ich beim Surfen gefunden):
Der Code klappt zum draufbrennen, aber in der Schaltung funktioniert er nicht... HAb ich nen Fehler eingebaut??Code:uint16_t readADC(uint8_t channel) { // Funktion 1 zum Auslesen der Spannung uint8_t i; // Variablen definieren (Zählervariable i + Resultat) uint16_t result = 0; ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); //ADEN = ADC Enable // wenn adps1+2 on sind und adps0 off, dann ist der Teilungsfaktor 64 (Tabelle Datasheet) ADMUX = channel; //Kanal wählen; REFs0+1 -> interne Referenz 2,56V verwenden, REFS1 gibt es bei Attiny13 nicht //externen Kondensator mit 100nF (Aufdruck 104) an AREF auf Masse //Dummy-Readout (unten), misst 1* Ergebnis, wird nicht gespeichert ADCSRA = ADCSRA | (1<<ADSC); // Schaltet bei ADCSRA das ADSC-Bit ein, d.h. Messung starten while(ADCSRA & (1<<ADSC)); //Warte bis Messvorgang vorbei ist // Nun 3* Spannung auslesen, Durchschnittswert ausrechnen for (i=0; i<3; i++) { // Schleife, startet 3* ADCSRA = ADCSRA |(1<<ADSC); // Einmal messen while(ADCSRA & (1<<ADSC)); //Warte bis Messung vorbei result = result + ADCW; // Resultate zusammenzählen (R1+R2+R3) -> später alles /3 } ADCSRA = ADCSRA & (~(1<<ADEN)); //ADC wieder deaktivieren result=result/3; // Durchschnittswert return result; } main () // Hauptprogramm, startet bei Power ON und Reset { int spannung; //Definiere Ganzzahl-Variable Spannung int einer,zehner, hunderter, startwert, mittelwert, endwert; int i,j,k = 0; DDRB=0b00001111; while (true) { uint16_t result = readADC(0); // ruft die ADC Funktion auf an Pin0 =ADC0 spannung = result*3086; spannung = spannung/1000; startwert=spannung/10; hunderter=startwert/100; mittelwert=startwert-100*hunderter; zehner=mittelwert/10; endwert=mittelwert-10*zehner; einer=endwert; for (i=0;i<einer;i++) { PORTB=PORTB|(1<<PB0); waitMs(50); PORTB=PORTB&(~(1<<PB0)); waitMs(50); } for (j=0;j<zehner;j++) { PORTB=PORTB|(1<<PB1); waitMs(50); PORTB=PORTB&(~(1<<PB1)); waitMs(50); } for (k=0;k<hunderter;k++) { PORTB=PORTB|(1<<PB2); waitMs(50); PORTB=PORTB&(~(1<<PB2)); waitMs(50); } waitMs(1100); } return 0; }






Zitieren
Lesezeichen