Ok, hab mal das alte Blinkprogramm auf den Chip gespielt und ratet mal...
Es ging ohne Probleme zum draufspielen! Keinerlei Fehlermeldungen.
Naja, schon mal die halbe Miete dachte ich mir und schließe ihn an meine Platine an... Und... Sie blinkt mit dem Code, den sie Blinken sollte.
Also ist der Fehler 100 %ig im Code!!
Code:#define F_CPU 3686400 // Taktfrequenz des myAVR-Boards #include <avr\io.h> // AVR Register und Konstantendefinitionen #include <inttypes.h> //---------------------------------------------------------------------- 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; } int main (void) // Hauptprogramm, startet bei Power ON und Reset { float spannung; //Definiere Variable DDRB=0b00001111; while (true) { uint16_t result = readADC(0); // ruft die ADC Funktion auf an Pin0 =ADC0 (float) (result); spannung=0.003086*(float) (result); waitMs(400); if ((spannung > 1.5) && (spannung < 1.7)) { PORTB=PORTB|(1<<PB1); waitMs(600); PORTB=PORTB&(~(1<<PB1)); } if ((spannung>1)&& (spannung<1.1)) { PORTB=PORTB|(1<<PB2); waitMs(600); PORTB=PORTB&(~(1<<PB2)); } else { PORTB=PORTB|(1<<PB1)|(1<<PB2); waitMs(600); PORTB=PORTB&(~(1<<PB1))&(~(1<<PB2)); } } return 0; }







Zitieren
Lesezeichen