Forum: Compiler & IDEs Atmega644p länge eines high bzw. low Zustandes bestimmen


von amateur (Gast)


Lesenswert?

Moin,
wahrscheinlich is die antwort sehr einfach...trotzdem kenn ich sie nich 
;-).
Wie kann man im Programm (AVR studio) bestimmen, dass zum Beispiel ein 
Motor
20 sekunden läuft, also der entsprechende Pin auf high is?
Danke schonmal für die Antworten :-)

von Ralf (Gast)


Lesenswert?

amateur schrieb:
> Wie kann man im Programm (AVR studio) bestimmen, dass zum Beispiel ein
> Motor 20 sekunden läuft, also der entsprechende Pin auf high is?
AVR-Studio mit Pin? ;-)

von Blödmann (Gast)


Lesenswert?

Wie war das nochmal mit den Datenblättern? Das schwarze ist die Schrift, 
oder?

von amateur (Gast)


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

von ATMEGA-Fan (Gast)


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.

von Karl H. (kbuchegg)


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

von amateur (Gast)


Lesenswert?

Ich dachte dass der bei delay garnix macht also dass der motor dann nich 
laufen würde oder täusch ich mich da?

von Karl H. (kbuchegg)


Lesenswert?

delay hat nichts mit Motor zu tun.

delay heißt einfach nur "Däumchen drehen". Und zwar eine definierte Zeit 
lang.
Was du vor dem delay machst (zb den Motor einschalten) und was du nach 
dem delay machen lässt (zb Motor ausschalten) interessiert doch den 
delay nicht.

von amateur (Gast)


Lesenswert?

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

von amateur (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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).

von amateur (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Karl H. (kbuchegg)


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.

von ... (Gast)


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.

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
Noch kein Account? Hier anmelden.