seit längerem versuche ich mit dem ATtiny84 ein Poti auszulesen und den Wert mit einer Zahl multipliziert als Zeitverzögerung in delay() zu schreiben..
Mit dem Arduino war das kein Problem: einfach Potistellung über analogRead() in eine long-Variable und dann in delay() schreiben.
void initADC()
{
/* this function initialises the ADC
ADC Notes
Prescaler
ADC Prescaler needs to be set so that the ADC input frequency is between 50 - 200kHz.
Example prescaler values for various frequencies
Clock Available prescaler values
---------------------------------------
1 MHz 8 (125kHz), 16 (62.5kHz)
4 MHz 32 (125kHz), 64 (62.5kHz)
8 MHz 64 (125kHz), 128 (62.5kHz)
16 MHz 128 (125kHz)
below example set prescaler to 16 for mcu running at 1MHz
*/
ADMUX =
(0 << REFS1) | // Sets ref. voltage to Vcc, bit 1
(0 << REFS0) | // Sets ref. voltage to Vcc, bit 0
(0 << MUX5) | // use ADC1 for input (PA1), MUX bit 5
(0 << MUX4) | // use ADC1 for input (PA1), MUX bit 4
(0 << MUX3) | // use ADC1 for input (PA1), MUX bit 3
(0 << MUX2) | // use ADC1 for input (PA1), MUX bit 2
(0 << MUX1) | // use ADC1 for input (PA1), MUX bit 1
(1 << MUX0); // use ADC1 for input (PA1), MUX bit 0
ADCSRA =
(1 << ADEN) | // Enable ADC
(1 << ADPS2) | // set prescaler to 16, bit 2
(0 << ADPS1) | // set prescaler to 16, bit 1
(0 << ADPS0); // set prescaler to 16, bit 0
ADCSRB =
(1 << ADLAR); // left shift result (for 8-bit values)
// (0 << ADLAR); // right shift result (for 10-bit values)
}
int main( void )
{
initADC();
while(1)
{
ADCSRA |= (1 << ADSC); // start ADC measurement
while (ADCSRA & (1 << ADSC) ); // wait till conversion complete
if (ADCH > 128)
{
// ADC input voltage is more than half of VCC
} else {
// ADC input voltage is less than half of VCC
}
}
return 0;
}
Sobald ich versuche am Ende des Codes ein Blinklicht starten zu lassen
Das funktioniert auch mit einem ATtiny84.
Vor einiger Zeit hatte ich mal gelesen, der Pin sollte mit "A0" o.ä. definiert werden, jedoch nicht nur mit der Ziffer.
Getestet habe ich es allerdings nicht.
Ich bin jetzt nicht sonderlich sattelfest in C++ - aber Das ist kein Arduino-Code - was passiert, wenn main() beendet wird?
Durch return 0 wird die main verlassen.
Wo ist für Dich 'das Ende', wo Du die Blinkerei anhängst?
postmaster-ino:
Ich bin jetzt nicht sonderlich sattelfest in C++ - aber Das ist kein Arduino-Code - was passiert, wenn main() beendet wird?
Durch return 0 wird die main verlassen.
Ach, das kann man schon so tun...
Da main() vom Type int sein muss, ist auch ein return Pflicht.
Return 0 bedeutet Programmende, ohne Fehler.
Es ist allerdings üblich, dass die meist vor dem return vorhandene Endlosschleife nie verlassen wird.
Das kürzest mögliche Arduino Programm ist:
int main()
{
//for(;;);
return 0;
}
Die eingebauten Sachen, wie millis() Serial und delay() funktionieren dann allerdings nicht mehr.
Denn die üblichen ISR werden nicht etabliert.
Dann: Arduino, ohne den Arduino Ballast.
Ja, das könnte natürlich sein....
Unser Matze_121 verzichtet auf setup() und loop(), und deshalb tuts sein delay() nicht mehr...
Naja, hätte er den fehlerhaften Code gezeigt, dann wäre mir das sofort aufgefallen(glaube ich)
Aber so...
combie:
Ach, das kann man schon so tun...
Da main() vom Type int sein muss, ist auch ein return Pflicht.
Return 0 bedeutet Programmende, ohne Fehler.
Es ist allerdings üblich, dass die meist vor dem return vorhandene Endlosschleife nie verlassen wird.
Das kürzest mögliche Arduino Programm ist:
int main()
{
//for(;;);
return 0;
}
Die eingebauten Sachen, wie millis() Serial und delay() funktionieren dann allerdings nicht mehr.
Denn die üblichen ISR werden nicht etabliert.
Dann: Arduino, ohne den Arduino Ballast.
---------
Ja, das könnte natürlich sein....
Unser Matze_121 verzichtet auf setup() und loop(), und deshalb tuts sein delay() nicht mehr...
Naja, hätte er den fehlerhaften Code gezeigt, dann wäre mir das sofort aufgefallen(glaube ich)
Aber so...
Hört sich gut an, ich habe wie muss dann mein Code geändert werden?