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!Zitat:
Beide Schreibweisen funktionieren, jedoch ist letzteres besser, da es kürzer und übersichtlicher ist.