Hallo liebes Forum, möchte einfach mal an einem Beispiel nachfragen, ob folgendes in einem AVR Programm: PORTD |=(0x60); TCNT1=0x00; while(TCNT1<13); PORTD &=~(0x60); TCNT1=0x00; while(TCNT1<13); genau so dusselig ist wie: PORTD |= 0x60; _delay_us(11); PORTD &=~ 0x60; _delay_us(11); Gruß Toralf
:
Gesperrt durch Moderator
Mit beiden Ansätzen blockierst Du das System. Dabei ist es egal, ob Du selber zählst (_delay..) oder zählen (while) lässt. Etwas anderes ist es, wenn Du die Zeit sinnvoll nutzt, während Du zählen lässt.
Frager schrieb: > ergo ISR? > > Gruß Toralf Welche Verzögerungen willst du denn erreichen? Für ein paar µs ist delay völlig OK. Ist ja nicht so, daß das Teufelszeug ist. Da kommt der Timer mit Interrupt gar nicht hinterher. Denn der Interrupt selbst braucht auch Zeit. Und vor allen Dingen nicht immer die gleiche Zeit. Mit _delay_us(11) erhältst du genau 11µs Verzögerung. Das sind bei 1MHz 11 Takte. Damit kann man auch ohne Timer leben. Solange nicht in einer Schleife eine Frequenz erzeugt werden soll. Dafür nimmt man dann einen Timer. Aber nicht mit Counter auslesen sondern im CTC- oder PWM-Mode. Zum LED-Blinken zählt man im Timer-Interrupt eine Variable rauf oder runter. Da geht es aber auch nicht um µs sondern um ein paar hundert ms. mfg.
Danke für die schnellen Antworten! @ Thomas Genau darum geht es. In einer Schleife verschiedene Werte aus einem Array auszulesen, um einen ganzen Schwung Daten an eine IR LED und damit an ein Endgerät zu senden. Diese Daten lese ich in einem Programm bereits in ein Array und möchte es dann wieder ausgeben. Das aufgenommene Array enthält jeweils die Werte der Verzögerung jedes H und L Pulses in us. Gruß Toralf PS Ich merke es an mir selbst, dass die Fragesteller nur zögerhaft mit dem wirklichen Anliegen rausrücken.
Ach ja, mit H Wert einer FB ist die Modulationsfrequenz von 36 bis 38 kHz im H-L Rhytmus gemeint. Alles klappt ja auch, wenn ich die Daten in einem Spaghettiprogramm übermittle. Gruß Toralf
Frager schrieb: > Ach ja, mit H Wert einer FB ist die Modulationsfrequenz von 36 bis 38 > kHz im H-L Rhytmus gemeint. Alles klappt ja auch, wenn ich die Daten in > einem Spaghettiprogramm übermittle. > > Gruß Toralf Also du willst nur die 36-38KHz Trägerfrequenz erzeugen? Das ist die Paradedisziplin für den PWM-Mode. Vor allen Dingen, wenn es darum geht, verschiedene Duty-Cycles, z.B. 25% High/75% Low, zu erzeugen. Guck dir mal Mode 14 in der Tabelle "Waveform Generation Mode" vom Timer1 an. Die LED kommt dann an OC1A bzw. OC1B. mfg.
Ich möchte halt flexibel sein, wenn ich so ein Array ausgeben möchte: int f[]={9074,4409,624,1594,564,1649,649,459,564,539,629,1589,564,539,629,45 4,649,454,569,1649,649,459,564,539,624,459,649,454,569,539,624,454,654,1 589,624,1589,569,539,624,1589,569,1649,649,1589,624,459,649,1589,624,158 9,569,1649,649,1589,624,1594,564,539,624,459,649,454,569,539,624,454,654 ,454,569,539,624,454,654,1589,624,1589,594,1624,649,1589,624,1589,594,16 24,649,1589,624,22984}; Es ist ein FB-Code der mir noch nicht begegnet ist, 13xGerät+13xGerät(neg)+8xDaten+8xDaten(neg) natürlich Start- und Endcode Vielen Dank für die Antworten. Ich arbeite an meinen Programmierkentnissen. Danke ins Forum. Gruß Toralf
Beitrag #6534922 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.