Atmega644p länge eines high bzw. low Zustandes bestimmen

Gast #2220224
Lesenswert?

ok ich wollte jetzt eigl nur wissen wie ich bestimme dass der motor 20 
sekunden läuft ( zum beispiel bei einem laufband):

- und ich habe keine RTC

also praktisch ...der motor liegt auf PB0

DDRB=0x01;
PORTB=0x01;

...und dann kommt wie langer der motor (also PB0) auf high bleiben 
soll...in meinem fall 20 sekunden..und da weiß ich nich wie man das 
macht
Gast #2220240
Lesenswert?

Schau mal ins Datenblatt, der 644 hat mehrere Timer.
Nimm einen davon, stelle den als CTC mit 10ms Interrupt ein.
Im Interrupt zählst dur einen Zähler runter, der bei Start mit dem
Wert für 20 sec geladen wurde. Hat der Zähler 0 erreicht (also nach 20 
sec)
ein Flag setzen. Das Flag wird ständig in der Main-Loop abgefragt und,
wenn es gesetzt ist, der Motor abgeschaltet. Fertig.
#2220242
Lesenswert?

amateur schrieb:
> ok ich wollte jetzt eigl nur wissen wie ich bestimme dass der motor 20
> sekunden läuft ( zum beispiel bei einem laufband):
>
> - und ich habe keine RTC
>
> also praktisch ...der motor liegt auf PB0
>
> DDRB=0x01;
> PORTB=0x01;
>
> ...und dann kommt wie langer der motor (also PB0) auf high bleiben
> soll...in meinem fall 20 sekunden..und da weiß ich nich wie man das
> macht

Im einfachsten Fall

_delay_ms


AVR-GCC-Tutorial
#2220342
Lesenswert?

amateur schrieb:
> aber es wäre doch unschön so viele delays hintereinander bis 20 sekunden
> erreicht sind....kann man das dann nich anders machen?

Man kann schon. Ob du das kannst wage ich zu bezweifeln.

Was ist denn an 4 delays mit jeweils 5 Sekunden unschön (jetzt mal davon 
abgesehen, dass die ganze _delay_ms Sache an sich nicht der Weisheit 
letzter Schluss ist).
#2220351
Lesenswert?

amateur schrieb:
> also heißt dass wenn ich vor dem delay einen motor anschalte bleibt er
> während des delays auch an?

Warum sollte der denn ausgehen?
Was ist das denn für ein Motor? Wenn der eingeschaltet wird, in dem man 
einen Pin auf 1 zieht, dann läuft der Motor, solange der Pin auf 1 ist.

Und ein Pin bleibt solange in seinem letzten Zustand, bis er von deinem 
Programm einen anderen Zustand zugewiesen bekommt.

Ergo:
Wenn du den Pin auf 1 stellst und danach den µC 2 Monate lang was 
anderes machen lässt ehe das Programm den Pin wieder auf 0 stellt, dann 
bleibt der Pin 2 Monate lang auf 1. Und da dein Motor immer genau dann 
läuft, wenn der Pin auf 1 ist, läuft daher auch der Motor 2 Monate lang 
durchgehend. Egal was der µC in der Zwischenzeit macht.
#2220362
Lesenswert?

amateur schrieb:
> ok du hast recht.. aber wie würdest du das denn machen wenn nich mit
> delay...ich kann das dann ja im tutorial nachlesen

Ich würde erst mal sagen, du siehst zu, das du das hin kriegst.
Du musst schon laufen können, ehe du dich zum New York Marathon 
anmeldest. Und vor dem Laufen kommt das Gehen. Du lernst jetzt gerade 
erst mal Krabbeln.
Gast #2220488
Lesenswert?

amateur schrieb:
> ok du hast recht.. aber wie würdest du das denn machen wenn nich mit
> delay...ich kann das dann ja im tutorial nachlesen

Du solltest lieber erstmal alle Posts in diesem Thread lesen, da steht 
es im Prinzip schon drin:
Beitrag "Re: Atmega644p länge eines high bzw. low Zustandes bestimmen"

Aber wie KHB schon sagte:
Karl Heinz Buchegger schrieb:
> Du musst schon laufen können, ehe du dich zum New York Marathon
> anmeldest. Und vor dem Laufen kommt das Gehen. Du lernst jetzt gerade
> erst mal Krabbeln.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren