PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Paralleler ablauf von Funktionen im ATMega 16 / 32?



Henry
18.05.2006, 18:09
Hallo,

ich fange gerade an mich mit dem ATMega zu beschäftigen und diesen mit C zu programmieren.
Dabei kam jetzt die Frage auf ob es möglich ist Funktionen im µC gleichzeitig ablaufen zu lassen.
Beispiel:
es soll ein Programm ablaufen welches Daten aufzeichnet und bei einem bestimmten ereignis soll eine LED anfangen zu blinken. Nun soll aber die LED in einem Takt blinken (Funktion blinken) und das eigentliche Programm soll trotzdem weiter ablaufen.

Zu Übungszwecken habe ich im Moment einen Takt wie folgt erzeugt:

int main()
{

while(1)
{
PORTD= (1<<PD2);
delay_ms(50);
PORTD= (0<<PD2);
delay_ms(300);
}

}

aber wenn ich das richtig gelesen habe bleibt ja der µC stehen beim Aufruf von delay_ms und somit kann ja nichts weiter ausgeführt werden.

Kann mir da jemand sagen ob es möglich ist funktionen parallel ausfüheren zu lassen?

Danke schon einmal

uwegw
18.05.2006, 18:44
Die Zauberworte heißen Interrupts und Timer...

->Timer erzeugt Blinkfrequenz, in seinem Compare-Interrupt prüft er ein globales Flag, das vom Hauptprogramm gesetzt wird, um das Blinken zu aktivieren. Wenn Flag gesetzt-> LED-Pin toggeln...

Henry
18.05.2006, 18:57
Danke,
dann werde ich mal danach suchen und mal schauen ob ich darüber etwas finde was anfängertauglich ist ;)

ogni42
18.05.2006, 20:32
Parallel geht nicht, nur nebenläufig. Ansonsten hat uweg Dir ja schon die entsprechenden Stichworte genannt.

Entsprechende Informationen findest Du auch in der wikipedia
http://de.wikipedia.org/wiki/Nebenl%C3%A4ufige_Programmierung

Steffen1982
23.05.2006, 14:21
Wenn du zwei prozesse "gleichzeitig" ablaufen lassen willst (vorrausgesetzt etwas schwieriger wie LED´s Blinken) kann dir ein Multitaskingsystem helfen das läuft auch auf einem 16er wenn man mit dem speicher etwas sorgfältig umgeht

alex007
16.07.2009, 12:57
Hallo Zusammen,

ich habe ein ähnliches Problem.

Gerne würde ich eine Drehzahlmessung realisieren, die permanent Werte liefern soll. Desweiteren sollen im "Hintergrund" Temperaturmesswerte erfasst werden. Die Werten soll dann im Controller abgespeichert werden und zusätzlich per RS232 übertragen werden.

Zur Zeit plane ich eine Lösung mit 2 Controllern.

Hat jemand eine Bessere Idee?

DANKE!

GRuss Alex

dremler
16.07.2009, 13:04
wie oft pro sekunde sollen die werte denn ausgemessen werden?

es reicht auch sie hintereinander auszulesen....;)

alex007
16.07.2009, 14:24
Die Anzeige (LCD) sowie die Übertragung per RS232 reicht im Sekunden Takt.

Die Frage ist nur, wie realisere ich dann die Drehzahlerfassung? Die soll ja permanet erfolgen.

Und die Daten sollen dann auch noch im Sekundentakt abgespeichert werden. Die Frage ist halt nur, wie lange der Speicher dann reicht!

Gruss Alex

dremler
16.07.2009, 15:12
schaue dir bitte nochmal die geschwindigkeit eines avrs an:) im besten fall 16 MHz

wenn die daten im sekundentakt abgespeichert werden reicht doch eine messung pro sekunde? selbst dann würde sich der avr noch langweilen;)


soweit ich weiß kann man den speicher auch erweitern...

alex007
16.07.2009, 16:52
ja, ich muss mir das datenblatt nochmal genau anschauen.

wie kann ich den speicher den erweitern?

gruss alex

Besserwessi
16.07.2009, 16:52
Im Wissens-Bereich ist ein Beispielprogramm für ICP (unter Timer(AVR)). Das ist praktisch die Drehzahlmessung, die im Interrupt läuft. Die Temperaturmessung kann man ähnlich realisieren. Die Aufgaben wie Drehzahlmessung und Temperaturmessung und Anzeige werden den µC kaum Auslasten. Den wirklich zeitkritischen Teil der Drehzahlmessung erledigt die Hardware.

Ich würde man schätzen das selbst bei 1 MHz Takt der µC zu 90 % der Zeit noch was anderes machen könnte, wenn man es gut programmiert.

Ein klassische Multitasking ist beim µC weniger angebraucht. Eher schon eine ausgiege Nutzung von Interrupts.