hallo zusammen, folgendes Problem...ich möchte über einen timer des Atmega8 eine LED blinken lassen...die Einrichtung des timers ist kein Problem...mir geht es um den Programmausschnitt welcher die LED blinken lässt (mit einer globalen Variablen) damit das Programm nebenbei weiterlaufen kann...danke schonmal im voraus
danke aber damit blinkt doch noch keine LED... ich hätte da eher an eine globale variable in der timer routine gedacht und diese im Hauptprogramm über: if ( x <= 2 ) { LED an; } if ( x >= 2 ) { LED aus; } if ( x == 4 ) { x=0; } geht das auch??
Andreas schrieb: > if ( x <= 2 ) { LED an; } > > if ( x >= 2 ) { LED aus; } x sollte nur einmal mit <= oder >= abgefragt werden, denn bei x = 2 ist es für beide Abfragen gültig.
Andreas schrieb: > danke aber damit blinkt doch noch keine LED... natürlich blinkt sie. Mag sein, dass sie zu schnell blinkt. Aber sie blinkt. Du möchtest dich erst mal schlau machen, was eigentlich genau die ^ Operation ist, und wie sich die auf Biteben auswirkt. > geht das auch?? Natürlich geht das auch. Aber warum umständlich?
:
Bearbeitet durch User
Karl Heinz schrieb: > Andreas schrieb: >> danke aber damit blinkt doch noch keine LED... > > natürlich blinkt sie. Mag sein, dass sie zu schnell blinkt. Aber sie > blinkt. > > Du möchtest dich erst mal schlau machen, was eigentlich genau die ^ > Operation ist, und wie sich die auf Biteben auswirkt. ah ok...und wie heißt diese Operation??
Karl Heinz schrieb: > Andreas schrieb: >> danke aber damit blinkt doch noch keine LED... > > natürlich blinkt sie. Mag sein, dass sie zu schnell blinkt. Aber sie > blinkt. bekommt man auch damit verschiedene Blinkfrequenzen hin??
Andreas schrieb: > bekommt man auch damit verschiedene Blinkfrequenzen hin?? Hast du dir schon IRGENDWELCHE Grundlagen angeeignet?
Andreas schrieb: > bekommt man auch damit verschiedene Blinkfrequenzen hin?? Das eine ist das Bit manipulieren und das andere ist das Aufrufintervall fürs Bitmanipulieren. wenn du schon umständlich machst, dann auch richtig.
1 | ISR (1KHz) |
2 | {
|
3 | static unt16_t count = 0; |
4 | count++; |
5 | |
6 | if (count == 500){ |
7 | count = 0; |
8 | PORTx ^= (1<<Pxy); |
9 | }
|
10 | |
11 | ...
|
12 | }
|
macht in diesem Fall 2x500ms Periodedauer => T=1s => f= 1Hz, Duty 50%.
Andreas schrieb: > danke aber damit blinkt doch noch keine LED... Die Blinkt...Wetten?! Letztendlich ändert es nur den aktuellen Zustand des Bit's. Du hattest nur nach dem Code snippet gefragt, welche die LED blinken lässt. Et voila... Ich gehe mal davon aus, das Du Deinen Timer richtig eingestellt hast. Dann müsste es klappen.
Andreas schrieb: > bekommt man auch damit verschiedene Blinkfrequenzen hin?? Grundlagen... Na ja, lass es dir erklären: https://www.youtube.com/watch?v=Zr0842FEC5Q
noch ne Frage zur ISR...ich hab mal gelesen das in die ISR höchstens Variablen rein sollen zumm hochzählen z.B. ...wenn das stimmt sollte man dann diese if Bedingung nicht lieber ins Hauptprogramm legen??
Andreas schrieb: > noch ne Frage zur ISR...ich hab mal gelesen das in die ISR > höchstens > Variablen rein sollen zumm hochzählen z.B. ...wenn das stimmt sollte man > dann diese if Bedingung nicht lieber ins Hauptprogramm legen?? Das brauchst Du doch nicht, wenn Du nur eine LED blinken lassen möchtest. Wofpr eine Variable inkremmentieren??.. Ach, ja es geht auch ganz ohne Code...Nimm einen NE555, damit kannst Du auch eine LED blinken lassen.
:
Bearbeitet durch User
Andreas schrieb: > noch ne Frage zur ISR...ich hab mal gelesen das in die ISR höchstens > Variablen rein sollen zumm hochzählen z.B. ...wenn das stimmt sollte man > dann diese if Bedingung nicht lieber ins Hauptprogramm legen?? So wie alle Dogmen, ist auch dieses so nicht haltbar. Du machst in einer ISR das, was es zu tun gibt. Das kann durchaus auch mehr sein, als nur eine Flagvariable auf einen Wert zu setzen. Es macht wenig Sinn einen komplizierten Mechanismus aufzusetzen, wenn dadurch andere Funktionalität den Bach runter geht. Eine Portbit umzuseten dauert auch nicht länger als eine Variable auf 1 zu setzen. Also kannst du auch gleich das Portbit umsetzen, anstelle dir die Finger mit 78 Flags und 12 Zusatzvariablen abzubrechen. Was du in einer ISR nicht machen solltest, das sind Aktionen die lange dauern! Insbesonders wenn diese Aktionen dann auch noch ein 'Warten auf ...' beinhalten, kann das ein No-No sein. Aber nichts von dem ist hier der Fall.
:
Bearbeitet durch User
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.