Hallo, ich habe folgendes Problem ich möchte 2 LEDs mit 4 Tastern steuern. Je 2 Taster schalten eine LED ein, welche eine Nachlaufzeit im Sekundenbereich haben soll ca. 30 bis 60sec. Wird aber einer der Taster während der Nachlaufzeit dedrückt, sollen sofort alle LEDs abschalten. PB0 oder PC2 High ist setzen PC0 auf High PB1 oder PC3 High ist setzen PC1 auf High PB0,PC2,PB1 oder PC3 setzen PC0 und PC1 auf Low wenn die Nachlaufzeit aktiv ist. Timer und Ausgänge funktionieren, Nachlaufzeit nicht so ganz.... Kann mir wer die Lösung des Problems nennen ??? Alles läuft auf einem Atmega8 mit internem Standarttakt Code ist angehängt. Danke !
> int time; > time=3600; Wo hast du den Wert von 3600 her? Dein µC läuft mit 1000000 Hz (Standardeinstellung) Du hast einen Vorteiler von 1024. D.h dein Timer zählt in 1 Sekunde um 1000000 / 1024 = 976.5 hoch. Wenn du also 30 Sekunden abzählen willst, musst du warten, bis der Timer den Wert 976.5 * 30 = 29296.8 erreicht hat. (Aufpassen: der maximale Wert, der in einen int passt, lautet 32767. Für Werte, die größer sind musst du also auf unsigned gehen. Dann gehts bis 65564)
Hallo, Danke für die Tips... was sagt Ihr denn allgemein zu dem Programm, das kann man doch bestimmt einfacher machen oder ? und warum läuft es nur im Simulator korrekt und nicht auf dem STK500 ? Gruss Dr.Unheil
Dr.Unheil wrote: > Hallo, > Danke für die Tips... was sagt Ihr denn allgemein zu dem Programm, Ist ziemlicher Müll. (Mag zwar hart klingen, ist aber so) * Lass den Timer in Ruhe, wenn er einmal tickt. Es hat keinen Sinn, dem Timer innerhalb der Schleife ständig einen neuen Vorteiler zu verpassen. Initialisierungen heissen Initialisierungen, weil sie nur einmal gemacht werden. * Zeit abzählen macht man, indem man den Timer einen Interrupt auslösen lässt, wenn eine bestimmte Zeitdauer abgelaufen ist. * 0<<PC0 ist immer 0. Eine binäre 0 kannst du nach links schieben sooft du willst, sie bleibt trotzdem 0. Insbesondere kann man so nicht abfragen, ob ein bestimmter Pin auf 0 liegt. * Eine kleine Statemachine wäre sicherlich einfacher. Dein Programm ist in einem bestimmten Zustand, repräsentiert durch eine Variable und verschiedene Werte in dieser Variablen. Wenn ein Ereignis eintritt (Taste gedrückt, Zeit abgelaufen, ...) dann wechselt die 'Maschine' in einen neuen Zustand über. * Greif auf 16-Bit Register (TCNT1H, TCNT1L) mit dem Sammelnamen (TCNT1) zu. Der Compiler kümmert sich schon um die richtige Reihenfolge. * Du benutzt Taster ohne sie zu entprellen. Das gibt Ärger.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.