Forum: Mikrocontroller und Digitale Elektronik Microcontroller für Abzugshaube (Miele DA73)


von Peter B. (schwarzer_peter)


Lesenswert?

Hi,
ich habe eine Abzugshaube von Miele mit vielen Funktionen. Auf der 
Steuerplatine befindet sich ein Mikrocontroller IMRGN2 von NEC. Leider 
eine Sonderanfertigung für Miele und so nicht zu bekommen. Für eine 
Ersatzplatine will Miele 350 € haben. Dafür bekommt man schon eine neue 
Abzugshaube.


Ich habe das Schaltschema abgezeichnet. Der Controller (5V VCC) hat 5 
digitale Eingänge, wo in einer Matrix 7 Tasten hängen, und 12 Ausgänge, 
wovon 4 die Motoren steuern, 1 das Licht, und der Rest 10 LEDs in einer 
Matrix.

Mit welchen Microcontroller(Board) könnte man diesen IMGRN2 ersetzen?

Grüße
Peter

von Martin S. (sirnails)


Lesenswert?

Photo und Schaltplan.

von Peter B. (schwarzer_peter)


Angehängte Dateien:

Lesenswert?

Hi,

hier die Bilder.

Peter

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Wie kommste auf die Idee das der Controller kaputt ist ?

von Peter B. (schwarzer_peter)


Lesenswert?

Weil alle Spannungen da sind aber nichts mehr funktioniert.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Ein Replacement (z.B. mit AVR) ist ja nicht schwierig.
Weißt du was der Controller machen muß ?
Alles rein Binäre I/O's ?
Was haben die 3 Widerstände (Pin 11,12,13) für Funktionen ?

von Helmut B (Gast)


Lesenswert?

Sehe ich das richtig Clock pin 1 über einen 1M an 230v?
Währe ein grund für einen Ausfall nach Spannungsspitze ?

Die Reset konstuktion über den Transistor hast du geprüft?
Der Verfärbte wiederstand lebt auch noch?

Was hat den die abzugshaube für Funktionen?
Anfürsich ansteuern der Motoren bzw des motors in 4 stufen und Licht ?
Sollte mit nem kleinen avr nicht so wild sein,

von MaWin (Gast)


Lesenswert?

Du suchst einen pinkompatiblen ? Vergiss es.
Nimm den uC, den du schon kennst und programmieren kannst,
und verdrahte ihn freifliegend, beispielsweise einen ATMega8.

Achtung, trotz Trafo ist die Schaltung nicht netzgetrennt.

von Peter B. (schwarzer_peter)


Lesenswert?

Hallo Dennis,

Über die Resistoren werden die Radialllüfter gespeist. Der Linke 700 Ohm 
ist mit Pin14 der rechte mit Pin11 verbunden. Also der Rechte Thyristor 
schaltet die Stufe 1 (Strom begrenzt durch 2000 Ohm), der linke Stufe 4 
(Turbo - volle Pulle).

Alle I/O's sind Binär.

Die Funktionen kann ich noch nachvollziehen. Möchtest Du es genau 
wissen?

Peter

von Peter B. (schwarzer_peter)


Lesenswert?

@Dennis
@Helmut
Sind keine komplizierten Sachen. Hier ein "Gedächtnisprotokoll" der 
Funktionen:

Der Schalter ganz links (Schublade) ist offen, wenn die Schublade 
rein-geschoben ist. In diesem Zustand lässt sich nur Licht bedienen. Die 
Taste „Licht“ schaltet den Relais (rechts oben) ein und aus.
Wird die Schublade herausgezogen schließt der Schalter und es wird 
automatisch Licht und die erste Stufe der Lüfter eingeschaltet. Jetzt 
funktionieren alle anderen Tasten auch. Mit der Taste „Licht“ lässt sich 
weiterhin die Lampe  steuern.
Mit den Tasten „+“ und „-„ schaltet man die Stufen 1,2,3 und 4 rauf und 
runter.
Taste „STOP“ schaltet den Lüfter ganz aus. Mit der Taste „+“ kann man 
ihn wieder einschalten.
Die Taste „MIN“ begrenzt die Laufzeit der Lüfter, 1. Klick auf 15 Min, 
2. Klick auf 30 Min, 3. Klick Funktion aus.
Die Taste „#“ soll man drücken nach dem man den Filter 
getauscht/gereinigt hat. Es leuchtet dann das weiße LED (an B4). Nach 
einer bestimmten Laufzeit der Lüfter (30 Std oder so) geht das weiße aus 
und das rote LED an und erinnert an die fällige Reinigung.
Entsprechend werden auch die LEDs gesteuert. Das LED „Stop“ geht an, 
wenn die Taste „Stop“ bedient wurde oder die eingestellte Zeit (15 bzw. 
30 Min) abgelaufen ist.
Das Reinschieben der Schublade schaltet alles aus.

@MaWin
Ist mir schon klar, dass ich keinen pinkompatiblen finde. Ist eine 
Sonderfertigung. Ich habe lange genug gesucht. Darum die Idee mit µC.
Ich bin zwar ein studierter Elektroniker, aber mein Diplom ist schon 30 
Jahre alt. Beruflich arbeite ich als Systemadministrator.

Mit Euer Hilfe würde ich mich aber an ein µC trauen. Nur was für einen?

Peter

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Wieso hast du den Pin Clock genannt ?
Hat die Haube eine Uhr "gehabt" ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Am "Clock"-Pin liegt ein 50Hz-Signal an ...

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Rufus Τ. Firefly schrieb:
> Am "Clock"-Pin liegt ein 50Hz-Signal an ...

Aber zu welchem Zweck ?
Echtzeituhr ?
Genaue Counter ?
Triac-Zündung ?

: Bearbeitet durch User
von Peter B. (schwarzer_peter)


Lesenswert?

Genau, es muss doch die 15 bzw. 30 Minuten Zählen. Es ist sonst kein 
anderer Taktgeber dabei.
Vielleicht wird auch genutzt um die Triacs bei Null zu schalten.

: Bearbeitet durch User
von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Ich denk ja diese MOhm-Schaltung wäre zu ungenau wenn da kein ADC-Pin 
das Ziel ist.
Es ist wohl eher nur ein Pulsgeber für einen Timer.
Die Motoren werden ja anders in der Geschwindigkeit geregelt und nicht 
mit Phasenanschnitt.

von MaWin (Gast)


Lesenswert?

> Triac-Zündung ?

Ja.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

MaWin schrieb:
>> Triac-Zündung ?
>
> Ja.

Erklär mir das bitte.

Braucht so ein Triac unbedingt eine gepulste Ansteuerung ? oder reicht 
da auch ein Dauersignal ?
Ich denk ja diese Abzugshaube hat nur 4 Stufen die durch zuschalten von 
Widerständen geregelt werden ?
Oder lieg ich da falsch ?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Peter Barton schrieb:
> Mit Euer Hilfe würde ich mich aber an ein µC trauen. Nur was für einen?

Von den Anforderungen her tut es mit Sicherheit ein mittlerer Mega a la 
Mega8/48/88/168/328 im 28 Pin Gehäuse. Du wirst lediglich ein 
Adapterboard bauen müssen wo der ISP Programmieranschluss drauf ist und 
die Pins des Mega sinnvoll auf den alten MC umgesetzt werden.
Ich empfehle dir, nicht den Mega 8 zu nehmen, seine Nachfolger haben 
nämlich Pinchange Interrupts an allen Eingängen frei wählbar, so das du 
später nicht umstricken musst, wenn du was vergessen hast. Es kann auch 
nicht schaden, das 50Hz Signal z.B. an T0 oder T1 zu führen, dann läuft 
der 50Hz Kram im Hintergrund ohne zusätzlichen Aufwand. Wenn du jetzt 
noch die Buttons an einen Port, die LED an einen anderen und die Triacs 
an den dritten Port schaltest, sollte das schon klappen.
Testen und Programmieren natürlich nur über Trenntrafo.

Dennis Heynlein schrieb:
> Braucht so ein Triac unbedingt eine gepulste Ansteuerung ?

Nein.
> oder reicht
> da auch ein Dauersignal ?
Ja, reicht.

> Ich denk ja diese Abzugshaube hat nur 4 Stufen die durch zuschalten von
> Widerständen geregelt werden ?
> Oder lieg ich da falsch ?
Nein, das sehe ich auch so. Die Jungs haben sich eine Regelung über 
Triac gespart und schalten stufig.

: Bearbeitet durch User
von Dennis H. (c-logic) Benutzerseite


Lesenswert?

@Peter Barton:

Die Idee von Matthias mit der Adapterplatine wäre natürlich der 
Königsweg.
Mit passenden DIP-Sockel(o.ä.) auf der anderen Seite.

Außerdem Eröffnen sich dir ja Erweiterungsmöglichkeiten :)
-Luftfeuchtesensor
-Echtzeituhr/Temperatur-anzeige mit LED-Segment-Display
etc.

"Du hast doch mit Absicht den Blumentopf auf den Röhrenfernseher 
gestellt und übergoßen, nur daß du den TFT-Fernseher bekommst."

von Gerhard W. (gerhard86)


Lesenswert?

Matthias Sch. schrieb:
> Du wirst lediglich ein
> Adapterboard bauen müssen wo der ISP Programmieranschluss drauf ist und
> die Pins des Mega sinnvoll auf den alten MC umgesetzt werden.

Ja, wobei es essentiell wichtig sein dürfte die Platine über ein 
externes, galvanisch getrenntes Netzteil zu versorgen beim 
in-system-herumprogrammieren ;-).

: Bearbeitet durch User
von Helmut B (Gast)


Lesenswert?

Ich würde die 50hz verbindung komplett weglassen. Für einen 15 bzw 30 
minuten timer reicht auch der interne quarz des Avr. Kommt ja nicht auf 
die sekunde an. Genauso für die Filterwechsel interwalle. Eine stunde 
mehr oder weniger dürfte den Filter auch nicht verstopfen.

Dann würde ich erstmal den alten Prozessor auslöten und die wichtigen 
anschlüsse auf z.b ein Steckbrett fühen.
Zum Basteln würd ich erstmal auch auf 230v verzichten und die 10 bzw 5 
volt über nezteile erzeugen. Die Triacs kannst du ja erstmal durch led'S 
"Simulieren"

Ich würde dir auch zu einem At Mega raten.

Kannst du Programmieren?

von Helmut L. (helmi1)


Lesenswert?

Ich wuerde 4 Schalter fuer die 4 Motoren einbauen und gut ist, es sei 
denn man braucht die Abzugshaube jetzt die naechsten Wochen/Monate 
nicht.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Ein Atmega168 mit Internem RC-Oszi und externem 32768Hz-Quarz ist ja 
auch kein so großes Drama.

von Helmut B (Gast)


Lesenswert?

Kein Drama aber muss eine dunstabzugshaube wirklich exakt nach 15 
minuten asgehen?
Halten wir die "schaltung" auf minimal so reicht ein zb mega168 ein paar 
kondensatoren und ein wiederstand.

Dein Aufwand würde ich sagen sollte auch ein avr einsteiger nach einigen 
stunden schaffen?
Zb einfach und simpel in Bascom. Denke unter 100 zeilen code könnte das 
ganze laufen.

von MaWin (Gast)


Lesenswert?


von Dennis H. (c-logic) Benutzerseite


Lesenswert?

@Peter Barton
Also V1.0 full compatible version.
Sollte nicht schwierig sein.
Welche Programmiersprachen haste in der Hinterhand ?
Ein Atmega168 hat genug Platz nach oben.
Die Funktionalität würde schon ein kleiner Tiny2313 packen.

von Peter B. (schwarzer_peter)


Lesenswert?

Vielen Dank für die vielen Antworten. Mit so großer Resonanz habe ich 
gar nicht gerechnet.

Ich habe natürlich Programmieren gelernt, aber das war noch zu 
Dinos-Zeiten.
Die Programmiersprachen gibt es wahrscheinlich heute nicht mehr. Wer 
kann sich noch an Cobol oder Fortran erinnern? Im Fortran habe noch 
große Programme für einen VAX-Rechner geschrieben . Später habe ich noch 
in Paradox (ObjectPAL) programmiert und klein bisschen LISP.
In µC-programmieren habe bis jetzt keine Erfahrungen.

Die Abzugshaube ist schon länger außer Betrieb und auf einen Tag oder 
Woche kommt nicht an. Ich habe das Thema lange nicht angepackt, weil ich 
mit meiner Solaranlage und Wärmepumpe beschäftigt war.
Es wäre allerdings schön, wenn sie noch vor Weihnachten laufen würde.

@Helmut
Auch ich finde dass die Zeitmessung nicht so genau sein muss.
Zur Sicherheit könnte ich auch die Verbindung zwischen 10 V und 
Strom-Netz auf der Leiterplatine durchtrennen. Die Triacs mit LED 
simulieren ist ne gute Idee.

@Dennis
Die Funktionserweiterung ist auch eine interessante Option. Die Haube 
könnte z. B. mit einem Piepton bei Anstieg der Feuchtigkeit oder 
Temperatur an Einschalten erinnern.

Habe etwas nach dem Atmega168 gegoogelt, sieht vielversprechend aus.
Wie muss ich das jetzt anpacken? Was und wo muss ich besorgen, um mit 
kleinstmöglichen Zeit- und Kostenaufwand größtmögliche Erfolge zu 
erzielen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Peter Barton schrieb:
> Wie muss ich das jetzt anpacken?

Du brauchst einen Computer, den du anscheinend schon hast, denn du bis 
ja im Internet :-) Als nächstes entscheidest du dich für eine 
MC-Platform, du hast schon gemerkt, das die meisten hier Atmel 
empfehlen, die PIC Familie gibts aber auch noch.
Dann besorgst du dir 2-3 MCs des gewünschten Types 
(ATMega8/48/88/168/328 sind alle pinkompatibel),passende IC Sockel 
dafür, ein paar 6 polige Pfostenfeldstecker für ISP, ein Säckchen mit 
100nF Kondensatoren, Punktrasterplatinen, Fädeldraht, Lötmaterial und 
einen passenden Programmierer für den MC.
Ich nehme den AVR ISP MkII, der rund 35 Euro kostet und alle Atmel MCs 
bis auf ein-zwei Exoten programmieren kann.Es gibt aber auch billigere 
wie z.B. den USBasp.
Wenn dein Rechner mit Windows läuft, kannst du in Basic (Bascom) 
programmieren, C und Assembler laufen auf allen möglichen Systemen. Für 
C und Assembler kannst du unter Win das AVR Studio 6 nehmen, gibts 
kostenlos bei
http://www.atmel.com
Lade dir da auch die Datenblätter des MC.

: Bearbeitet durch User
von Walter (Gast)


Lesenswert?

Helmut Lenzen schrieb:
> Ich wuerde 4 Schalter fuer die 4 Motoren einbauen und gut ist,

sehe ich genauso,
das ist doch wieder Mal ein klassisches Beispiel wie man ein Gerät 
unnötig kompliziert und damit fehleranfällig macht.
Wenn es wenigstens WLAN hätte um die Haube auch im Urlaub ein- und 
ausschalten zu können :-)

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Walter schrieb:
> Helmut Lenzen schrieb:
>> Ich wuerde 4 Schalter fuer die 4 Motoren einbauen und gut ist,
>
> sehe ich genauso,
> das ist doch wieder Mal ein klassisches Beispiel wie man ein Gerät
> unnötig kompliziert und damit fehleranfällig macht.
> Wenn es wenigstens WLAN hätte um die Haube auch im Urlaub ein- und
> ausschalten zu können :-)

Ist ja wie in der Vorstandsetage von IBM hier ;).

von Helmut B (Gast)


Lesenswert?

Hast du eventuell noch einen alten PC mit LPT drucker schnitstelle? Dann 
kannst du dir den 35€ Programier adapter sparen. Da reicht es schon 3 
oder 4 leitungen vom Druckerport durch wiederstände zum Avr.

Wenn du einen LPT noch hast kann ich dir genaue infos und schaltplan und 
programm gerne raussuchen.

Ansonsten die usb variante z.b. Ebay 370490000223

ATMega8/48/88/168/328 ich würde vom 8 abraten da veraltet. 328 is etwas 
to mutch. der 168 is noch immer massig überdimensioniert aber passt 
schon.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Helmut B schrieb:
> 328 is etwas
> to mutch. der 168 is noch immer massig überdimensioniert aber passt
> schon.
Allerdings immer auf die Preise achten. Bei unseren lokalen Jungs 
(Segor) ist der 328 billiger als seine kleinen Brüder, und das nicht zu 
knapp. Der 168 kostet 4,90 und der 328 nur 3,50. Der 88 liegt mit 4,30 
dazwischen.

: Bearbeitet durch User
von Peter B. (schwarzer_peter)


Lesenswert?

@Helmut B
Danke für die Ratschläge. Da meine (Frei)Zeit noch knapper ist als die 
Kasse, wäre mir lieber ein fertiges Board, als selber zu löten. Auch 
weil ich dadurch, als µC-Anfänger, eine Fehlerquelle weniger hätte.

Habt Ihr hier ein Tipp, was ich da nehmen könnte?

von Peter B. (schwarzer_peter)


Lesenswert?

OK, Arduino Uno hat aber 14 digitalen IOs. Ich brauche 17, muss ich also 
drei von den analogen als digits missbrauchen, oder?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Peter Barton schrieb:
> Ich brauche 17, muss ich also
> drei von den analogen als digits missbrauchen, oder?

Ja, das ist aber kein Problem. Jeder als I/O gekennzeichnete Pin eines 
AVR kann als Digital Ein-oder Ausgang dienen.
Ich habe allerdings Bedenken wegen deiner begrenzten Zeit. Ich hatte es 
am Anfang so verstanden, das du nach neuen Horizonten Ausschau hältst 
und dich deswegen mit MC beschäftigen wolltest.
Jetzt tendiere ich auch eher zu:

Dennis Heynlein schrieb:
> Walter schrieb:
>> Helmut Lenzen schrieb:
>>> Ich wuerde 4 Schalter fuer die 4 Motoren einbauen und gut ist,
>>
>> sehe ich genauso,
>> das ist doch wieder Mal ein klassisches Beispiel wie man ein Gerät
>> unnötig kompliziert und damit fehleranfällig macht.
Da tut es ein einfacher 4 stufiger Drehschalter, den du an die Pins des 
ausgelöteten alten MC hängst. Nimm ne Version mit Kunststoffachse und 
gut is'.

: Bearbeitet durch User
von Peter B. (schwarzer_peter)


Lesenswert?

Soo, da bin ich wieder, und zwar ganz schön weiter (dank Eurer Hilfe).

Ich habe mir ein Buch besorgt und ein Arduino Uno, habe ein Programm 
geschrieben und alles verdrahtet.

Bin fast am Ziel, leider habe ich noch paar Probleme.
Das größte ist, dass sich das Programm nicht hochladen will, wenn am Pin 
0 (RX) etwas angeschlossen ist, es kommt dann die nichtssagende Meldung:
(avrdude: stk500_getsync(): not in sync: resp=0x00)

Weißt jemand, wie man das umgehen kann? Stundenlange googeln hat nichts 
gebracht. Diese Meldung wird hundertfach aufgelistet, aber meistens geht 
es um Fälle wo sich gar nichts hochladen lässt.

Die Ausgänge von Arduino das sind doch alle OC oder? Welche Spannung 
können die vertragen? Nur 5V oder geht auch 10V?

Weiter, überlege ich noch, wie kann ich erreichen, dass die Funktion 
einer Taste nur einmal ausgeführt wird, wenn die Taste mal etwas länger 
gedrückt wird. Im Moment schaltet sich z.B. das Licht ein und aus bei 
jedem Durchlauf des Programmes.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Was hast du denn am RX angeschlossen ?

von hinz (Gast)


Lesenswert?

Peter Barton schrieb:
> Die Ausgänge von Arduino das sind doch alle OC oder?

Oder!


> Welche Spannung
> können die vertragen? Nur 5V oder geht auch 10V?

Keine 10V.

von Gisbert (Gast)


Lesenswert?

Wir haben auch eine Miele Dunstabzugshaube mit der gleichen 
Steuerungsplatine.

Sie war bis jetzt zweimal defekt, beim ersten Mal Netztrafo defekt beim 
zweiten Mal Kapazitätsverlust des 470µF-Kondensators im Netzteil.

Wenn der Kondensator defekt ist muß man die Taste für die gewünschte 
Funktion immer öfter betätigen bis irgenwann gar nichts mehr geht.

MfG Gisbert

von Peter B. (schwarzer_peter)


Lesenswert?

@Dennis
Am Pin 0 hängt der "alte" Pin 14 (siehe Schema oben). Ist definiert als 
Output.
Zum Hochladen muss ich es trennen, danach wieder reinstecken und 
funktioniert.

@hinz
keine 10V? Das heißt ich kann die Triacs so nicht steuern?
Im Moment hängen da noch LEDs.

@Gisbert
Bei mir war es eindeutig der µController.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Wenn du den RX-Pin belegt hast, mußte es wohl abziehen. (oder du machst 
dir deinen Eigenen Bootloader rein und nimmst einen nicht belegten Pin.)

Beim Original ist noch nen Transistor zwischen Triac und Controller.
Ich denk ja der MaskenROM/OTP-Controller macht normal auch nur 5 Volt.

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?

Matthias Sch. schrieb:
> Ja, das ist aber kein Problem. Jeder als I/O gekennzeichnete Pin eines
> AVR kann als Digital Ein-oder Ausgang dienen.

Aber nur die DIP-Varianten der x8-er. Bei den anderen gibt es noch zwei 
ADC Eingänge ohne Logikfunktion.


Peter Barton schrieb:
> Die Ausgänge von Arduino das sind doch alle OC oder?

Nein, sie sind so, wie Du sie programmierst. Also entweder TP, Eingang 
hochohmig oder Eingang mit Pullup.
Nach einem Reset (welcher bei Programmierung automatisch ausgelöst wird) 
sind alle Portpins hochohmige Eingänge.

> Welche Spannung
> können die vertragen? Nur 5V oder geht auch 10V?

Maximal Betriebsspannung - Steht im Datenblatt.


> Weiter, überlege ich noch, wie kann ich erreichen, dass die Funktion
> einer Taste nur einmal ausgeführt wird, wenn die Taste mal etwas länger
> gedrückt wird. Im Moment schaltet sich z.B. das Licht ein und aus bei
> jedem Durchlauf des Programmes.

Du musst warten, bis der Taster wieder losgelassen wurde.


Gruß

Jobst

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Zeig mal dein Programm.

von Peter B. (schwarzer_peter)


Lesenswert?

Vielen Dank für Eure Tipps.

@Dennis
Problem Nummer 1 beseitigt. Anstatt von Pin0 habe ich Pin13 genommen. Es 
funktioniert, keine Probleme beim Hochladen.

Ich werde das Programm mit Sicherheit hier publizieren, möchte es aber 
nicht mit dem unfertigem "Zwischenstand" tun.

@Jobst
> Du musst warten, bis der Taster wieder losgelassen wurde.

Genial, könnte von mir sein ;-) , habe ich implementiert, es 
funktioniert hat aber ein kleines Schönheitsfehler. Der Lauf des 
Programms wird angehalten, was Einfluss auf die LEDs hat.

Hier muss ich doch etwas die Logik meines Programmes beschreiben.
Wie auf dem Schaltplan zu sehen ist, sind die LEDs in einer Matrix 
verbunden.
Genauso große Array wurde im Programm deklariert und speichert den 
Zustand der LEDs. Auch die Tasten sind in einer Matrix verbunden wobei 
die zwei Spalten der Tasten-Matrix den zwei Reihen der LED-Matrix 
entsprechen.
Der zustand der Reihen (Pin 14 und 15) wechselt (01->10->01 usw.) bei 
jedem Durchlauf des Programms. Entsprechen wird die Array ausgelesen und 
die OUTs geschrieben. Wird das Programm durch den Klick auf eine Taste 
angehalten , erlöschen die aktiven LEDs der anderen Reihe.


Ich dachte, die Ausgänge des Arduino "Open Collector" sind, da sie kein 
"High" zustand annehmen wenn ich auf sie HIGH schreibe. Ich musste an 
jeden Ausgang, der mit einem Inverter verbunden ist,  ein 10k Resistor 
zu VCC anhängen, damit diese überhaupt funktionieren.
Wenn die aber nicht mehr als 5V ertragen können, dann muss die 
Triacks-Steuerung geändert werden. Also noch ein Tranistor (npn) 
zwischen Arduino und vorhandene (pnp) Transistoren.
Oder ich tausche die drei pnp gegen npn und dann brauche ich nur noch 
die 10k gegen 1k zu tauschen. Das müsste eigentlich auch funktionieren.

von Dennis (Gast)


Lesenswert?

Willst du nicht die Tastenabfrage und Led-ansteuerung in einen 
Timerinterrupt legen ?
Dein serielles Programm hört sich sehr nach SPS-Stil an.

von Jobst M. (jobstens-de)


Lesenswert?

Peter Barton schrieb:
> Der Lauf des
> Programms wird angehalten, was Einfluss auf die LEDs hat.

Dann solltest Du Dein Programm überdenken. Ein Timerinterrupt ist auf 
jeden Fall ein guter Weg.

Peter Barton schrieb:
> da sie kein
> "High" zustand annehmen wenn ich auf sie HIGH schreibe.

Doch, wenn man es richtig macht, treiben die 20mA-40mA.
Hast Du Dir schon das Kapitel I/O im Datenblatt angesehen?


Gruß

Jobst

von Peter B. (schwarzer_peter)


Lesenswert?

Könnt Ihr bitte etwas genauer beschreiben wie mir ein Timerinterrupt 
hier helfen soll?

@Jobst
Welchen Dokument meinst Du? (bitte Link).
Ich habe arduino.cc in allen Richtungen gescroolt und geblättert und 
kein richtigen Datenblatt gefunden.

von Jobst M. (jobstens-de)


Lesenswert?

Peter Barton schrieb:
> Könnt Ihr bitte etwas genauer beschreiben wie mir ein Timerinterrupt
> hier helfen soll?

Da Deine LEDs und Taster offensichtlich gemultiplext sind, kann der 
Timerinterrupt sich automatisch darum kümmern, diese anzusteuern bzw. 
abzufragen, während Du im Hauptprogramm auf ein Ereignis wartest.

Peter Barton schrieb:
> @Jobst
> Welchen Dokument meinst Du? (bitte Link).

Ich meine das Datenblatt zum Controller - dieser wird von Atmel 
hergestellt. Suchen musst Du selber.

> Ich habe arduino.cc in allen Richtungen gescroolt und geblättert und
> kein richtigen Datenblatt gefunden.

Ich kann mir nicht vorstellen, dass bei Arduino weder auf die 
Programmierung der Ports eingegangen wird, noch auf das Datenblatt des 
Controllers verwiesen wird. Vor allem nicht beides zusammen. Die Systeme 
sind für Anfänger gedacht und die meisten kommen damit klar - bekommen 
diese Info also dort, wo sie sie erwarten.


Gruß

Jobst

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Hab nochmal auf den Schaltplan geschaut.
Die LED's sind ja auf eigenen IO-Leitungen gemultiplext.
Der Timerinterrupt wird einfach ausreichend schnell betrieben um das 
Flimmern der LED's beim Multiplexen zu vermeiden.
Während dem Aufruf kann der Timerinterrupt zyklisch auch gleich die 
Tasten abfragen.
Du mußt dir nur Gedanken machen wie du zwischen Timerinterrupt und 
Hauptprogramm den Status der Tasten austauschst.

: Bearbeitet durch User
von Peter B. (schwarzer_peter)


Angehängte Dateien:

Lesenswert?

Sorry, das mit dem Timerinterrupt habe ich nicht hingekriegt. Wenn das 
in Verbindung mit einer einfachen "Wartefunktion": while(tasteOn==0){} 
überhaupt möglich ist.
Wie auch immer, ich habe das Problem anders gelöst: mit einer 
zusätzlichen Variabel, die sich merkt, ob die Taste immer noch gedrückt 
wird oder schon wieder. Funktioniert einwandfrei.

Soo, das Projekt ist damit beendet. Die Dunstabzugshaube hängt wieder in 
der  Küche und meine Frau ist begeistert, (was auch der Zweck der Übung 
war.;-))
Mir hat auch Spaß gemacht, mein altes Hobby zu erfrischen.

Ich bedanke mich recht herzlich bei allen, die mir dabei geholfen haben.

Ich aktualisiere gerade die Dokumentation, und  in der Hoffnung, dass 
sie noch jemand brauchen kann, werde ich sie hier hochladen.

Im Anhang schon mal das Programm.

Grüße

Peter

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Timerinterrupt ist nicht so schwierig wie es sich anhört.
Du nimmst die Schritte für LED-Refresh und Tastenabfrage und kapselst 
sie in eine eigenständige Funktion, die so gebaut ist, daß sie jederzeit 
das Hauptprogramm unterbrechen kann.

Du hast ja zumindest mal V0.1 fertig :)
Die nächsten Versionen werden ja mit deinem Wissen in µC-Programmierung 
auch ausgefeilter werden. :)

von Peter B. (schwarzer_peter)


Angehängte Dateien:

Lesenswert?

Das ist schon die Rev. 0.3. ;-) Die Erste war noch „sehr seriell“ 
geschrieben, jetzt ist schon viel zusammengefasst und verschachtelt 
worden. Natürlich ist das Programm noch entwicklungsfähig, vieles kann 
man besser oder ganz anders machen.

Ich denke, so wie es jetzt strukturiert ist, lässt sich mit dem 
Interrupt nicht viel bekleistern. Das Hauptprogramm tut doch nichts 
anderes, als der Reihe nach alle Tasten abfragen. Wird eine ON gefunden, 
werden entsprechend die OUTs und die Variablen gestellt. Das tut es 
Hundertmal in der Sekunde. Dazwischen noch synchron den LED-Zustand 
ausgeben und bei Bedarf die Timer runterzählen.

Alternativ könnte man im Hauptprogramm nur die LED-Ausgabe und die Timer 
lassen, dazu noch eine Überwachung der vier Leitungen von den Tasten, 
die bei Ereignis ein Interrupt auslösen würde. Der ermittelt die Taste 
und leitet an eine passende Methode weiter, wo die sonstigen 
Behandlungen der Ereignisse ausgelagert wurden.

Sicher lassen sich noch andere Szenarien ausdenken.  Im Anhang paar 
Diagramme, die den Programmablauf erläutern.

von Alexander S. (esko) Benutzerseite


Lesenswert?

Peter Barton schrieb:
> Das Hauptprogramm tut doch nichts
> anderes, als der Reihe nach alle Tasten abfragen. Wird eine ON gefunden,
> werden entsprechend die OUTs und die Variablen gestellt. Das tut es
> Hundertmal in der Sekunde.

Hast du eine Entprellung für die Tasten?

von Peter B. (schwarzer_peter)


Lesenswert?

@Alexander
Nein, war nicht nötig. Das sind Folientasten, und wie Du auf dem 
Sachaltplan sehen kannst, an jeder Tastenleitung hängt noch ein 
Kondensator.

von Alexander S. (esko) Benutzerseite


Lesenswert?

Peter Barton schrieb:
> an jeder Tastenleitung hängt noch ein Kondensator.
Das habe ich übersehen. Dennnoch eine denkbar schlechte Art zum 
entprellen, wobei die Kritik nicht gegen dich gerichtet, sondern an den 
Erbauer der Schaltung.

von Peter B. (schwarzer_peter)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt auch den Schaltplan aktualisiert und noch paar Fotos 
beigefügt.
Hier noch eine kurze Beschreibung ausgeführten Arbeiten für eventuelle 
Nachahmer.

Der kaputte Chip von NEC wurde mit Dremel weggeflext und die einzelnen 
Beinchen rausgelötet. An deren Stelle kam ein etwa 20cm langes Stück vom 
alten Druckerkabel. Dann alles  mit Heißkleber dingfest gemacht. Am 
anderen Ende des Kabels wurden vergoldete Stifte (aus einer IDE-Buchse) 
angelötet.

Für Arduino-Stromeinspeisung wurde ein passender Stecker (übrig 
geblieben von einem Universal-Netzteil) genutzt, der an die 10 V auf dem 
Board angeschlossen wurde.
Um alle Eingänge des ULN-Chips an den VCC anzuschließen, kam ein 
Resistor Terminator (10kohm) aus einem alten 5 1/4" Laufwerk zum 
Einsatz. Platz für ihn (zwischen Controller- und ULN-Chip) war schon auf 
dem Board vorgesehen.

Dann wurden die drei Transistoren (gewonnen aus einem kaputten 
PC-Netzteil) wie auf dem Foto zu sehen ist, montiert. Darunter verlaufen 
zum Glück die VCC und GRND Bahnen. Die LEDs, die auf dem Foto noch zu 
sehen sind, dienten nur als Anzeige, ob der Triac angesteuert wurde. Die 
wurden danach entfernt.

Als Stromquelle bei allen Arbeiten und Tests diente ein ausrangierte 11 
Volt Notebook-Akku. Erst als alles fertig war und funktionierte, wurde 
die DAH an Stromnetz angeschlossen. Nicht vergessen vorher den USB-Kabel 
aus dem Arduino zu ziehen.

Noch mal vielen Dank an Alle die mitgemacht haben, und bis zum nächsten 
Projekt.

von Jobst M. (jobstens-de)


Lesenswert?

Peter Barton schrieb:
> mit Dremel weggeflext

Dremel = Handmultifunktionswerkzeug des Herstellers Dremel
Flex = Winkelschleifer der FLEX-Elektrowerkzeuge GmbH

Sehr schön :-)

Wenn Du auch noch den Code dazu packst, dann ist dem Nächsten mit diesem 
Problem auch weiter geholfen.


Gruß

Jobst

von Peter B. (schwarzer_peter)


Lesenswert?

Danke für die Korrektur. Bloß keine Schleichwerbung.
Ich habe also den alten Controller mit einem Handmultifunktionswerkzeug 
winkelweggeschleift.;-)
Wie heißt das noch schön? Sämtliche Produktnamen sind Eigentum der 
jeweiligen Hersteller.

Den Code habe ich am 8.12. hochgeladen.

Gruß

Peter

von Jobst M. (jobstens-de)


Lesenswert?

Ich fand die Kombination einfach nur klasse :-D

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Ist das jetzt ein beendetetes Projekt oder wirst du den Source-code noch 
weiter optimieren ? V2 eventuell (mit Interrupten) ?
Versuchst du dein nächstes Projekt mit einem losen Mikrocontroller ?

von Peter B. (schwarzer_peter)


Lesenswert?

Dennis Heynlein schrieb:
> Ist das jetzt ein beendetetes Projekt

Ja, es funktioniert einwandfrei und ich muss mich jetzt um anderes 
liegengebliebenes kümmern.

Nächstes Projekt? Mal sehen,im nächsten Jahr ist  erstmal Garagendach 
fällig und PV soll auch drauf.
Ich habe hier noch einen alten Geldspielautomaten von Merkur, so ein mit 
vielen Lämpchen und drehenden Scheiben, das wäre eine Herausforderung 
den wieder zum Leben zu erwecken. Dafür würde ein Arduino wahrscheinlich 
nicht reichen.

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.