Hallo miteinander, Ich würde gerne eine simplen beeper welcher am PB0 meines Atiny13 hängt beepen lassen sobald dieser über den PB1 ein high bekommt. Des weiteren soll es die möglichkeit geben den beeper zu muten (30 Sekunden ca) sobald der Controller am PB2 ein high bekommt. Leider funktioniert das Ganze nicht so wie ich es gerne hätte. Bitte um Hilfe. #include <avr/io.h> #include <util/delay.h> #define F_CPU 8000000UL int indicator (void) { if (!(PINB & (1<<PINB1))) { PORTB = ~0b00100000; } if (!(PINB & (1<<PINB2) & (1<<PINB1))) { PORTB = 0x04; _delay_ms(1000); } else { PORTB=0x00; } } int main(void) { DDRB=0xFF; //Alles an PORTB als Ausgang definieren DDRB &= ~((1 << DDB1) | (1 << DDB2)); //PORTB 1 / 2 als Eingang umdefiniert PORTB = (1<<PORTB0); while (1) { indicator(); } }
:
Bearbeitet durch User
Nichts ist nicht viel.. Kompilieren und flashen geht? Fang vorne an und taste dich langsam vorwärts: Ich würde erstmal ein Struktogramm anfertigen bis du sowas "im Kopf" kannst. Danach einzelne Funktionalitäten implementieren: - einzelne Ports in Abhängigkeit von Pins toggeln - erstmal nur die Ausschaltverzögerung realisieren Gruß Dennis Edit: Wenn du Code-Tags nutzt ist das Posting übersichtlicher.
:
Bearbeitet durch User
Und vermeide die Verwendung von "delay". An so einer Stelle bleibt das Programm solange stehen und macht nichts anderes. Starte einen Interrupt gesteuerten Timer der nach Ablauf z.B. ein Flag setzt. Das verwendest du in deiner Hauptschleife um was auszulösen, aber nicht um in einer Schleife darauf zu warten.
Daniel S. schrieb: > #include <util/delay.h> > #define F_CPU 8000000UL Muß hier nicht die Reihenfolge umgekehrt sein?
Hallo Dennis, re-edit: kompilieren und flashen geht habe Versucht ein PAP zu erstellen. Komme aber trotzdem noch nicht weiter da ich es irgendwie nicht schaffe die ein und ausgänge richtig zu definieren. LG
:
Bearbeitet durch User
Okay... Unabhängig wie das Ergebnis aussehen soll passt dein Quelltext schonmal nicht zu deinem PAP. Du sagst, du hast Probleme die GPIO zu definieren. In dem Fall lies dir nochmal das Kapitel [1] durch und schreib ein Programm, mit dem du ganz bewusst und zielgerichtet einen einzelnen Port oder Pin ansprichtst. Du hast nämlich drei Aufgaben: 1) Wie beherrschie ich die Toolchain? (Scheint zu klappen?!) 2) Wie beherrschie ich die Programmiersprache und den Controller? (Nachzulesen im AVR-GCC-Tutorial.) 3) Wie realisiere ich die Programmlogik? (PAP ist ein Anfang.) Gruß Dennis [1] AVR-GCC-Tutorial Edit: Typo
:
Bearbeitet durch User
Jürgen D. schrieb: > Und vermeide die Verwendung von "delay". > An so einer Stelle bleibt das Programm solange stehen und macht nichts > anderes. Starte einen Interrupt gesteuerten Timer der nach Ablauf z.B. > ein Flag setzt. Das verwendest du in deiner Hauptschleife um was > auszulösen, aber nicht um in einer Schleife darauf zu warten. Wäre normalerweise auch mein Vorschlag, jedoch hat das Programm nur diese eine Funktion, d.h., dass es keine Rolle spielt in meinem Fall. Aber vielen Dank, sonst irgendetwas gesehen im Syntax vieleicht? LG
Route 6. schrieb: > Daniel S. schrieb: >> #include <util/delay.h> >> #define F_CPU 8000000UL > > Muß hier nicht die Reihenfolge umgekehrt sein? Ich weiss nicht ob das eine Rolle spielt?
Daniel S. schrieb: > Route 6. schrieb: >> Daniel S. schrieb: >>> #include <util/delay.h> >>> #define F_CPU 8000000UL >> >> Muß hier nicht die Reihenfolge umgekehrt sein? > > Ich weiss nicht ob das eine Rolle spielt? Sagen wir mal so. Wenn du vorher 2 Stunden vor dem Ofen wartest und erst hinterher erfährst, dass Muffins nur 20 Minuten im Rohr sein sollen, dann wird das wohl nicht so sinnvoll sein.
Karl H. schrieb: > Daniel S. schrieb: >> Route 6. schrieb: >>> Daniel S. schrieb: >>>> #include <util/delay.h> >>>> #define F_CPU 8000000UL >>> >>> Muß hier nicht die Reihenfolge umgekehrt sein? >> >> Ich weiss nicht ob das eine Rolle spielt? > > Sagen wir mal so. > Wenn du vorher 2 Stunden vor dem Ofen wartest und erst hinterher > erfährst, dass Muffins nur 20 Minuten im Rohr sein sollen, dann wird das > wohl nicht so sinnvoll sein. Das klingt plausibel, äußerst plausibel. Hut ab für den Vergliech :'D LG
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.