Hi Markus
Danke erstmal für deine schnelle Antwort.
Wie mache ich das den mit der Led und schadet das der nicht(An Aus An Aus)?
Wieso geht denn nach 500 Millis. die andere led nicht an?
mfg
Philip
Hi Markus
Danke erstmal für deine schnelle Antwort.
Wie mache ich das den mit der Led und schadet das der nicht(An Aus An Aus)?
Wieso geht denn nach 500 Millis. die andere led nicht an?
mfg
Philip
Nein, LEDs altern nicht durch Ein-/Ausschaltvorgänge.
Dein Code ist ... komisch, außerdem wäre es empfehlenswert, über die entsprechenden Makros/Funktionen auf die beiden BackLEDs zuzugreifen, was gewisse Fehler ausschließt und den Code außerdem auch ohne ASURO-Schaltplan lesbar macht.
Ich will mich aber dennoch daran versuchen:
Knipst PC0 an, macht aber PC1 NICHT aus.Code:DDRC |= (1<<PC0); PORTC |= (1<<PC0);
Knipst PC1 an, macht aber PC0 NICHT aus.Code:DDRC |= (1<<PC1) | (1<<PC0); PORTC |= (1<<PC1);
Ich kann aber nicht nachvollziehen, warum bei dir nur PC0 an geht.
AAAABER: Da du deinen ASURO nicht vernünftig initialisiert hast, ist vieles möglich. Wie oben geschrieben, verwende die Funktionen aus der ASURO-Bibliothek (entsprechend der Dokumentation), allen voran Init().
mfG
Markus
Hi Philip, der Code ist soweit richtig, wie gesagt, die erste LED wird nicht ausgeschalten, das erreichst du, wenn du
schreibst.Code:DDRC |= (1<<PC1) | (1<<PC0); PORTC &= ~(1<<PC0); //Schaltet erste LED aus PORTC |= (1<<PC1);
Wie schon markusj gesagt hat liegt dein Problem bei Msleep(). Da du den ASURO nicht initialisiert hast, ist der Timer nicht gesetzt, der die Zeitsteuerung übernimmt. Die Schleife von Msleep(), die auf diesen Timer wartet, endet in der Endlossschleife, da er gar nicht an ist. d.h. bei Msleep(500) bleibt dein Programm stecken, die Zweite LED geht nicht an. Ein Init() löst also die Probleme.
Gruß
ASUR0
Okay, hat geklappt DANKE!
Nun zu nächsten "vorhaben" :
Ist es möglich mit einem 2,5k Poti die Zeit von Mseep zu ändern?
Habe noch 4 ADC ports frei unter anderen auch PC4 (ADC4) für die Auswertung der Tasten.
Dann am besten noch das es von 1ms bis max. 200ms geht, möglich?
mfG
Philip
Geändert von AsuroPhilip (12.03.2011 um 18:38 Uhr)
Okay habe ein poti angeschlossen(PC5) und habe mir mit dem DoctorAsuro programm die spannung auslesen lassen, wenn ich das poti drehe geht die Volt zahl höher bzw. tiefer bis 0V und 5V.
Also brauche nur noch Software hilfe ;->
mfG
Philip
Also wenn Volt < 1 ist soll er die Zeit von Msleep ändern und wenn Volt < 2 ist wieder ändern usw. oder geht das auch stufenlos?
Geändert von AsuroPhilip (12.03.2011 um 19:51 Uhr)
Hi Philip,
du willst also den PC4 auslesen. Dazu muss man AVCC an VCC anschließen (über widerstand/Spule) und an AREF über einen Kondensator an Masse anschließen (vgl. Asuro-Schaltplan).
Der Code dazu: (aus AsuroLib, angepasst):
Beim PC4 liefert die Funktion einen Wert zwischen 0 und 255.Code:unsigned int ReadPC4() { ADMUX = (1 << REFS0) | (_BV(MUX2)); // Referenz mit externer Kapazitaet und Mux auf PC4 ADCSRA |= (1 << ADSC); // Starte AD-Wandlung while (!(ADCSRA & (1 << ADIF))) // Ende der AD-Wandlung abwarten ; ADCSRA |= (1 << ADIF); // AD-Interupt-Flag zuruecksetzen return ADC; // Ergebnis als 16-Bit-Wert }
Das kann man dann zur Zeitsteuerung nutzen:
Eine Verzögerung zwischen 200 und 2750 ms.Code:Msleep(ReadPC4()*10+200);
Gruß
ASUR0
Lesezeichen