Forum: Mikrocontroller und Digitale Elektronik ATtiny2313 - Datenaustausch mit Interrupt


von Peter K. (peter_km)


Lesenswert?

Ich baue mir gerade einen eigenen Platinenbelichter mit Steuerung. Für 
meine eigene 4-stellige 7-Segmentanzeige habe ich mir einen eigenen 
Decoder mit einem ATtiny2313 "gebastelt/geschrieben". Um diesen 
einzustellen habe ich einen zweiten uC, welcher über 2 Verbindungen die 
Befehle überträgt.

Vorweg: Ja ich könnte SPI oder ähnliches nutzen, möchte mich aber im 
Bereich Timing und uC-Programmierung bereichern. Die Datenübertragung 
soll so funktionieren: 1. Bit: 1. Verbindung I/O, dann Interrupt 
auslösen → ausgelöst und uC liest 1. Verbindung → speichert Bit ab. 
Diesen Prozess wiederhole ich 16mal für 2 Bytes. Mit einem einfachen 
Testaufbau, 2 Taster und "simulieren", funktiuoniert es sehr gut.

Nun aber die Praxis: Sobald ich die beiden uC über die Steckverbindung 
verknüpf wird scheinbar der Interrupt immer wieder ausgelöst. Dabei 
macht der "Sender" noch gar nichts.

Wenn jemand dieses "Phänomen" kennt, würde ich mich über eine Antwort 
sehr freuen.


Peter K.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Wenn jemand dieses "Phänomen" kennt, würde ich mich über eine Antwort
>sehr freuen.

Falsche Interrupt Sense Control Einstellung ?

MfG Spess

von Peter K. (peter_km)


Lesenswert?

Die habe ich auch schon überprüft ... jetzt mal so ne wage Vermutung: 
Könnten irgendwelche Störungen und daraus resultierende Schwankungen im 
Verbindungskabel entstehen? ...


Peter K.

von spess53 (Gast)


Lesenswert?

Hi

>Die habe ich auch schon überprüft ...

Und was hast du mit ISCn1:ISCn0 eingestellt?

MfG Spess

von Karl H. (kbuchegg)


Lesenswert?

Jetzt mal losgelöst von der löblichen Absicht, sich über 
µC-Kommunikation zu informieren.

Du hast in einem Platinenbelichter einen µC der sich nur um eine 7-Seg 
Anzeige kümmert; einen weiteren der nur 2 Tasten beaufsichtigt?

Wow. Das ist so ziemlich die krasseste Fehleinsetzung einer 
Mehrprozessor-Lösung, die mir je begegnet ist. Einen Platinenbelichter 
schupft ein 2313 locker komplett alleine mit links. Und dabei wird ihm 
sogar noch fad.


Aber seis drum:
Programm + Schaltplan.

von Peter K. (peter_km)


Lesenswert?

Problem gelöst: Ich danke dir spess ... ich könnt meinen Kopf gegen die 
Wand kloppen. Beim ISC setzen ne 0 und ne 1 vertauscht Facepalm. Geht 
jetzt.

Bezüglich Karl: Für mich nicht innlos, da der 2. uC mehr Aufgaben 
übernimmt als du denkst. Und für mich als Einsteiger ist es zum Lernen 
einfach gut.


Peter K.

von Karl H. (kbuchegg)


Lesenswert?

Peter K. schrieb:

> Bezüglich Karl: Für mich nicht innlos, da der 2. uC mehr Aufgaben
> übernimmt als du denkst.

In einem Platinenbelichter?
Jetzt hast du meine Neugier geweckt. Was macht der noch?

> Und für mich als Einsteiger ist es zum Lernen
> einfach gut.

OK, akzeptiere ich. Ich hab ja auch ausdrücklich die Absicht gelobt, 
sich in der Richtung Prozessor-Kommunikation weiterbilden zu wollen.

Trotzdem solltest du dir eine einfache Regel merken.
Es hört sich immer gut an, wenn man sagt: Oh, da nehmen wir einfach 
mehrere Prozessoren.
Aber er Teufel steckt im Detail. Die Prozessoren müssen miteinander 
kommunizieren. In manchen (vielen) Fällen müssen sich die Prozessoren 
auch gegenseitig synchronisieren. Wer ohne Not mehrere Prozessoren 
einsetzt, wo einer alleine es auch tut, hatte noch nie mit diesen 
Problemen zu kämpfen gehabt. Zumal dann ja auch die Kommunikation 
programmtechnisch zu Buche schlägt, die man aber bei lediglich einem 
Prozessor gar nicht brauchen würde.

Eine 4-stellige 7-Segment Anzeige und ein paar Taster machen ein 
Multiplex-Code im Timer Interrupt und die PeDa Entprellung in derselben 
ISR in weniger als 1% der verfügbaren Rechenleistung bei 1Mhz 
(wahrscheinlich sogar sehr viel weniger). Da bleibt noch jede Menge 
Resourcen für weitere Features übrig.

Nichts für ungut. Ich finds super, dass du das hingekriegt hast und du 
hast sicherlich eine Menge dabei gelernt. Ich seh aber auch hier im 
Forum des öfteren, dass gerade Neulinge die Leistungsfähigkeit der µC, 
die sie in Händen halten, ganz krass unterschätzen. Und natürlich was 
man mit guter Standard-Programmierung da alles rausholen kann.

: Bearbeitet durch User
von Peter K. (peter_km)


Lesenswert?

Karl Heinz schrieb:

> In einem Platinenbelichter?
> Jetzt hast du meine Neugier geweckt. Was macht der noch?

1. Der Decoder ist fähig bis zu 8 Stellen anzusteuern, kann die Lampen 
dimmen oder einen Testdurchlauf, sprich alle Leds nacheinander einzeln 
ansteuern, durchführen. Alles auf Befehl steuerbar, die Lampen faden 
auch zur befehlsmäßig gewünschten Helligkeit. Der 2. uC "betreut" 6 
Taster, 2 Taster +/- für Minute, 2 für Sekunden und 2 für Start/Pause 
und Stopp. Desweiteren steuert er ein Relais zur Ansteuerung des 
UV-Led-Matrix und hört noch auf einem am Deckel eingebauten Mikrotaster 
um beim Öffnen Pause u machen und danach weiterzumachen. Er soll über 
ein "Dev-Mode" einstellbar sein, also z.B. Standardzeit, ...

Und der Probleme mit Synchronisation zwischen mehreren Prozessoren bin 
ich mir bewusst.


Peter K.

von Karl H. (kbuchegg)


Lesenswert?

Peter K. schrieb:
> Karl Heinz schrieb:
>
>> In einem Platinenbelichter?
>> Jetzt hast du meine Neugier geweckt. Was macht der noch?
>
> 1. Der Decoder ist fähig bis zu 8 Stellen anzusteuern, kann die Lampen
> dimmen oder einen Testdurchlauf, sprich alle Leds nacheinander einzeln
> ansteuern, durchführen.

Ja.
Haut mich jetzt noch nicht vom Hocker. Ist mit einem Standard-Multiplex 
in einer ISR alles kein Problem.

> Alles auf Befehl steuerbar, die Lampen faden

Haut mich immer noch nicht vom Hocker.

Bis jetzt sind wir noch immer unter 1% Rechenleistungsverbrauch

> auch zur befehlsmäßig gewünschten Helligkeit. Der 2. uC "betreut" 6
> Taster,

Ja.
PeDa Entprellung. Die Rechenleistung kratzt jetzt maximal erstmals die 
1% Hürde.

> und Stopp. Desweiteren steuert er ein Relais zur Ansteuerung des
> UV-Led-Matrix

Ok. ein paar Portpins ansteuern. Nichts weltbewegendes.

> und hört noch auf einem am Deckel eingebauten Mikrotaster
> um beim Öffnen Pause u machen und danach weiterzumachen.

Immer noch nicht.

> Er soll über
> ein "Dev-Mode" einstellbar sein, also z.B. Standardzeit, ...

Ja schön.

Die zuletzt benutzte Zeit ins EEPROM speichern und beim 
Wiedereinschalten von dort holen. Vielleicht ein paar Presets für 
Belichtungszeiten. Selbstverständlich alles im EEPROM gespeichert und 
einstellbar. Alles noch immer kein Drama.

Und die Zeit zählen muss er selbstverständlich auch :-)


Bis jetzt hab ich noch nichts gehört, was einen Tiny2313 ansatzweise ins 
Schwitzen bringen würde. Die ANzahl der Pins könnte knapp werden. Aber 
da nehm ich dann auch lieber ein Schieberegister, als mich auf das 
Abenteuer Mehrprozessor einzulassen.


Aber seis drum. Das System steht und funktioniert. Gratulation.
WEnn es dich interessiert kannst du ja mal beim nächsten Projekt vorher 
anfragen, wie man die Dinge programmtechnisch so organisiert, dass ein 
Prozessor alleine ausreicht. Ist das ein Angebot?

: Bearbeitet durch User
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.