So, das Board geht erst mal, waren nur kleine Verbindungsdenkfehler mit fataler Wirkung![]()
Naja, also den Code hab ich auch gerade ausgebessert und lade ihn jetzt auf den Chip.
Fehlercode scheint auf:
""
brennen ...
benutze: mySmartUSB MK2 an com3 mit ATtiny13
USB-Treiber installiert, aktiv (V 5.4.24.0), Port: com3
Prozessor: ATtiny13
schreibe 2968 Bytes in Flash-Memory ...
Fehler: beim Überprüfen der geschriebenen Daten.
Erste Abweichung bei Byte 0 , "0x09" != "0x01"
""
Dann poste ich noch mal den korrigierten 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*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; }Naja, der Verständlichkeit gegenüber Anfängern halber bevorzuge ich a=a|... statt a|=a denn zu Anfang konnte ich mir |= nicht erklären und fand es auch nirgendwo im Internet... als ich las, das ist das selbe wie =...|... war alles sofort klar!Beide Schreibweisen funktionieren, jedoch ist letzteres besser, da es kürzer und übersichtlicher ist.







Zitieren

Lesezeichen