PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino/Atmega Multitasking (?) Problem


tsaG
2012-05-23, 12:56:24
Hallo!

Ich habe hier einen Arduino der 4 Relais schalten soll. Dies geschiet erst einmal durch die Schalter und andererseits durch Signale welche über den IR Port empfangen werden. Als dritte funktion sollen noch Kommandos über I2C an Port 4 und 5 versandt werden.

Das wäre ja quasi Multitasking da über den Sensor abgehört wird, während er auf Signale von den Tastern wartet.
Ist das ganze Möglich? Oder wie relaisiert man das ganze besser? Eventuell mit mehreren Chips?
Theoretisch müsste man alles über Interrupts machen jedoch hat der Atmega8 ja nur zwei (welche schon vom das I2C benutzt werden)

hier noch ein Schaltplan.

EDIT: Wenn ich es mit mehreren (3) Chips mache (2 Senden (button und IR) und einer stellt ein) muss ich es mit diesem Multimaster sketch machen, oder? (http://digitalcave.ca/resources/avr/arduino-i2c.jsp) Damit kann ich mir ja quasi ein Netzwerk aus Arduinos bauen welches die benötigten sachen umsetzt.

tsaG
2012-05-23, 13:47:05
Edit. hat sich erledigt. Einfach kein Delay und schon klappt es! Zusätzlich werde ich noch die Schalter debouncen

EDIT: Falscher knopf, das sollte ein Edit. werden :(

meru
2012-06-06, 08:49:18
Für die Zukunft:

Es gibt zur genüge IO-Expander für den I2C-Bus - wenn du den sowieso verwendest brauchst du nichtmal extra Pins - die meisten können auch nen Interrupt auslösen wenn sich der Eingangszustand ändert.

Außerdem sind die I2C Pins sicher nicht die beiden Interrupts! Da hängen bei dir die Relais dran (INT0/1) - SDA/SCL sind die I2C Pins.

Selbst wenn du nichtmehr genug Interrupts zur Verfügung hast - du kannst ja auch mehrere Geräte an einen hängen, in der ISR musst du die dann halt durchpollen.
(Für diese kleinen Aufgaben mehrere µC verwenden wäre imho recht lächerlich)

Edit:
Ich würds in etwa so machen:
-) I2C-IO-Expander für Taster, der hängt an einem Interrupt - löst der aus dann die Daten von dem abfragen - dementsprechend Schalten
-) I2C-IO-Expander für Relais
-) Der zweite Interrupt reagiert auf ein IR-Signal - das auswerten und Schalten

Das Problem hier ist aber, dass dann der µC der I2C-Master sein muss, der Zweite dann logischerweise Slave (oder halt umständliches Multimastering), allerdings könntest du natürlich auch den zweiten Microcontroller interrupten lassen und dann fordert der Master die Daten an (oder per Software einen zweiten I2C Bus) - wenn du wirklich nur Daten senden willst dann ist das natürlich eh alles kein Problem!

Du würdest also mit den zwei I2C und den weiten zwei Interrupt-Pins alles abdecken und hast für etwaige weitere Aufgaben/Geräte noch allerhand Pins frei.