Die Simulation sagt das es OK ist.
Was meinst du mit (habe 16MHz an XTAL1 + 2)
Druckbare Version
Die Simulation sagt das es OK ist.
Was meinst du mit (habe 16MHz an XTAL1 + 2)
mit diesem code funktioniert es nun:
mit den 16 MHz hab ich meinen Quarz gemeint^^Code:#include <avr/io.h>
int main(void)
{
DDRD = 0xFF;
while (1)
{
uint8_t i;
uint16_t result;
int i2 = 60;
ADMUX = (0<<REFS1)|(1<<REFS0); // Kanal waehlen
ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler
// setzen auf 8 (1) und ADC aktivieren (1)
/* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) ) {
; // auf Abschluss der Konvertierung warten
}
result = ADCW; // ADCW muss einmal gelesen werden,
// sonst wird Ergebnis der nächsten Wandlung
// nicht übernommen.
/* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
result = 0;
for( i=0; i<i2; i++ )
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while ( ADCSRA & (1<<ADSC) ) {
; // auf Abschluss der Konvertierung warten
}
result += ADCW; // Wandlungsergebnisse aufaddieren
}
ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2)
result /= i2; // Summe durch vier teilen = arithm. Mittelwert
if (result < 128)
{
PORTD = 0b10000000;
}
else if (result >= 128 && result < 256)
{
PORTD = 0b01000000;
}
else if (result >= 256 && result < 384)
{
PORTD = 0b00100000;
}
else if (result >= 384 && result < 512)
{
PORTD = 0b00010000;
}
else if (result >= 512 && result < 640)
{
PORTD = 0b00001000;
}
else if (result >= 640 && result < 768)
{
PORTD = 0b00000100;
}
else if (result >= 768 && result < 896)
{
PORTD = 0b00000010;
}
else
{
PORTD = 0b00000001;
}
}
return 1;
}
ich glaub du hast auch vergessen den PORTC als eingang zu definieren
das brauch man nicht, der ist standardmäßig auf input so wie alles was nciht initialisiert wird