Forum: Mikrocontroller und Digitale Elektronik Interrupt für eine Impulsschaltung ATmega 32


von Jan P. (jan__)


Lesenswert?

Hallo,

ich besitze das AVR-NET-IO von Pollin mit dem ATmega32.

Ich möchte gerne eine Impulsschaltung bauen, die es mir ermöglicht eine 
Pumpe in vorgegebenen Zyklen ein- und auszuschalten.

Bsp: durch ein Poti wird vorgegeben wie lange die Impuls- und die 
Pausendauer sein soll. Beides ist immer gleich lang.

Praktisch: Ich habe ein vorgegebenes Intervall von einer Minute. Dieses 
Intervall lasse ich dann beliebig oft Ablaufen, um eine größere Zeit zu 
erzeugen. Die Intervalle sollen nur ganze Minuten umfassen.

So weit der Plan.

Ich habe mir überlegt, dass es am einfachsten wäre, den Controller 
sinnlos zählen zu lassen. Allerdings kann er dann nebenher keine 
Aufgaben mehr erledigen, was für die Anwendung sehr wichtig ist.

Jetzt meine Frage an euch, wie programmiere ich so einen Interrupt und 
funktioniert das überhaupt so, wie ich mir das vorstelle?

Bin für jede Hilfe dankbar.

Ich programmiere in C und ich möchte, wenn es geht, keinen fertigen Code 
haben.

Danke :)

von Thomas E. (thomase)


Lesenswert?

Jan Phillip schrieb:
> Jetzt meine Frage an euch, wie programmiere ich so einen Interrupt und
> funktioniert das überhaupt so, wie ich mir das vorstelle?
Für sowas gibt es Timer.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Oder auch

FAQ: Timer

von c-hater (Gast)


Lesenswert?

Jan Phillip schrieb:

> ich besitze das AVR-NET-IO von Pollin mit dem ATmega32.

Schön, und welche Software benutzt du für diese Hardware? Das wäre eine 
nicht ganz unwesentliche Information, insbesondere unter 
Berücksichtigung der Tatsache, daß du ja die Software offensichtlich mit 
einer eigenen Funktion erweitern möchtest, findest du nicht?

> Ich möchte gerne eine Impulsschaltung bauen, die es mir ermöglicht eine
> Pumpe in vorgegebenen Zyklen ein- und auszuschalten.
>
> Bsp: durch ein Poti wird vorgegeben wie lange die Impuls- und die
> Pausendauer sein soll. Beides ist immer gleich lang.

Naja, "Impulsschaltung" ist vielleicht nicht so ganz der treffende 
Begriff, aber die weiteren Ausführungen sind so geartet, daß man klar 
genug erkennen kann, was du erreichen möchtest. Kurzfassung: einen 
Analogwert einlesen (Potistellung) und damit die Periode einer 
auszugebenden Rechteckfrequenz einstellen. Kein besonders unübliche 
Aufgabe.

Die einzige verbleibende Frage: Wozu brauchst du hier ein AVR-NetIO? 
Also inwiefern ist hier eine Kommunikation über's Netz involviert? Ich 
sehe nämlich erstmal keine.

von Uwe (de0508)


Lesenswert?

Hallo Jan,

wäre eine Ampelsteuerung mit ihren verschiedenen Phasen für rot, 
rot/gelb, grün, damit vergleichbar?

von Jan P. (jan__)


Lesenswert?

c-hater schrieb:

> Schön, und welche Software benutzt du für diese Hardware? Das wäre eine
> nicht ganz unwesentliche Information, insbesondere unter
> Berücksichtigung der Tatsache, daß du ja die Software offensichtlich mit
> einer eigenen Funktion erweitern möchtest, findest du nicht?

Nein, weil auf dem Controller nur mein eigenes Programm ist, ich habe 
zuvor ein Image gezogen.


> Kurzfassung: einen
> Analogwert einlesen (Potistellung) und damit die Periode einer
> auszugebenden Rechteckfrequenz einstellen.

Danke bei meiner Wortfindungsstörung :)


> Die einzige verbleibende Frage: Wozu brauchst du hier ein AVR-NetIO?
> Also inwiefern ist hier eine Kommunikation über's Netz involviert? Ich
> sehe nämlich erstmal keine.

Die Frage lässt sich sehr leicht beantworten: Und zwar habe ich das 
Board gekauft des Controllers wegen. Die Platine war dann der Bonus 
dabei.
Der Controller soll später noch eine Ladeüberwachung übernehmen, diese 
soll dann geloggt werden und im Netzwerk abgelegt werden.




@ Uwe S.

Ich bin mir in diesem Falle nicht sicher, der Unterschied zwischen einer 
Ampelschaltung und der von mir gewollten, ist der, dass mein Intervall 
variabel ist, die Grundidee müsste aber die gleiche sein.
Wie kommst du drauf? Hast du schon eine fertig oder Interesse an einer?

von c-hater (Gast)


Lesenswert?

Jan Phillip schrieb:

> Nein, weil auf dem Controller nur mein eigenes Programm ist, ich habe
> zuvor ein Image gezogen.
[...]
> Der Controller soll später noch eine Ladeüberwachung übernehmen, diese
> soll dann geloggt werden und im Netzwerk abgelegt werden.

Also willst du irgendwann doch über's Netz kommunizieren. Da du 
offensichtlich schon Probleme hast, so einfache Aufgaben wie das 
Einlesen eines Analogwertes und die Ausgabe eines Rechtecksignals zu 
lösen, wäre es sehr sinnvoll, von Anfang an auf Basis einer Software zu 
entwickeln, die später auch die Netzwerkkommunikation übernehmen kann, 
denn du wirst das heute und wohl auch in den nächsten zwei Jahren sicher 
nicht alleine hinbekommen.

Also z.B. Ethersex als Basissoftware.

Das hat dann gleich noch folgende Vorteile bezüglich deines Nahziels:

1) Routinen zur ADC-Konfiguration und zum Auslesen von ADC-Werten sind 
bereits enthalten. Dein Programm braucht also nur auf die entsprechenden 
Funktionen zuzugreifen, um die Potistellung einzulesen.

2) Routinen zur Konfiguration der Ausgänge und zur Ausgabe sind bereits 
enthalten. Dein Programm braucht also nur auf die entsprechenden 
Funktionen zuzugreifen, um einen Ausgang ansteuern zu können.

3) Es gibt bereits einen systemweiten "heartbeat", in den du dich bloß 
als Callback einklinken mußt, um regelmäßig irgendwas zu tun. Im 
konkreten Fall also (in Pseudocode) folgendes:

HalbPeriode = Potiwert()*Skalierungsfaktor+MindestHalbperiode
Zähler += 1
Wenn Zähler>HalbPeriode
(
  ToogleAusgabepin()
  Zähler = 0
)

Und in tatsächlich funktionsfähigem C-Code (und etwas Ethersex-Metacode) 
ist das Ergebnis auch wirklich nicht viel länger als diese paar Zeilen 
Pseudocode.

Wenn man erstmal ein funktionsfähiges Buildsystem für Ethersex hat, ist 
eine Erweiterung dieser geringen Komplexität in weniger als einer Minute 
eingebaut.

von Jan P. (jan__)


Lesenswert?

Ich finde es ja gut, wenn Aussagen getätigt werden, die man sich lieber 
gekniffen hätte.

Wenn du gelesen hättest, dann wüsstest du, dass das Problem nicht beim 
Einlesen einen Analogwertes liegt.

Und selbst wenn es zwei Jahre dauert?! Na und? Ich will das selber 
schreiben, aber aufgrund deiner Ausführungen hast du sicherlich schon zu 
Beginn deiner Arbeiten mit Mikrocontrollern alle Funktionen beherrscht.

Ich stehe halt noch am Anfang, heißt aber nicht, dass ich es nicht 
lernen kann.

Ich werde es weiterhin so versuchen, aber auch die von dir 
vorgeschlagene Software werde ich in Betracht ziehen.

von Karl H. (kbuchegg)


Lesenswert?

Jan Phillip schrieb:


> Wenn du gelesen hättest, dann wüsstest du, dass das Problem nicht beim
> Einlesen einen Analogwertes liegt.

sondern bei deinem Verständnis über Timer.
Links wurden dir ja schon gegeben

FAQ: Timer
[[http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer]]

> Und selbst wenn es zwei Jahre dauert?! Na und? Ich will das selber
> schreiben,

Ja, dann machs!

> aber aufgrund deiner Ausführungen hast du sicherlich schon zu
> Beginn deiner Arbeiten mit Mikrocontrollern alle Funktionen beherrscht.

Nö. Aber er hats gelernt. Und das ist so passiert, dass er sich auf 
seinen Hintern gesetzt hat und geübt hat.

von Jan P. (jan__)


Lesenswert?

Ich bin dabei.
Allerdings muss das ganze neben der Arbeit herlaufen, also wird's länger 
dauern.

Das ist wahr, dass er's gelernt hat, und das will ich auch.

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.