Forum: Mikrocontroller und Digitale Elektronik Portbelegung µC


von Ithamar G. (antimon)


Lesenswert?

Hallo zusammen,

für mich (noch) ein schwieriges Thema, für viele von Euch vermutlich
Selbverständlichkeit - deswegen würde ich mich freuen, wenn ich ein
paar Tips bekomme:

Wie schliesse ich die folgenden Teile am besten an den Controller an?
Ich möchte eine Leinwandsteuerung realisieren, die entweder per Taster
oder per Fernbedienung bedient werden kann.
Dabei soll das Ganze möglichst effizient und stromsparend realisiert
werden - wenn ich mit µCs arbeite, dann gescheit!

Wie nutze ich am Besten die Interrupts? Ich habe einen Atmega8, der ja
zwei Interrupts hat, die bei einem Tastendruck oder
Fernbedienungssignal den Controller aus dem Schlaf wecken sollen...
aber wie schliesse ich diese am besten an?
Es sollen zwei Schalter (für Leinwand auf/ab) vorhanden sein, ein
TSOP1736 und ein Reed-Kontakt für die Erkennung ob die Leinwand
eingefahren ist.

Jetzt könnte ich alle Komponenten per Wired-Or an einen
Interrupt-Eingang anschliessen und dann in der ISR pollen, wer den
Interrupt ausgelöst hat.
- Soll dann das Polling in der ISR geschehen oder soll durch den
Interrupt der µC nur "aufgeweckt" werden und dann in der
Hauptschleife gepollt werden?
- Wie verbindet man die Komponenten mit Wired Or? Mit Logikbausteinen
am Besten? Oder mit Dioden, damit keine gegenseitige Beeinflussung
stattfinden kann?

Ich könnte auch einen Interrupt-Eingang für Taster etc. verwenden und
einen für den TSOP und mit diesem Eingang gleich das Signal empfangen -
oder geht das nicht? Würde das Sinn machen?

Fragen über Fragen, ich hoffe ich habe Euch nicht damit erschlagen!
Vielen Dank schonmal für Eure Bemühungen!

von DJShadowman (Gast)


Lesenswert?

Also ich kann es zwar nur aus Bascom sagen, aber DA ist es kein Thema,
eine Fernbedienung anzischließen.
Da nimmste nen IR-Empfänger, son Modul für 1 Euro.
Das schließte an den Ext.Int. vom AVR an.
Und dann kannste mit jeder Fernbedienung, die RC5-Code macht, den uC
fernsteuern.
Im Programm kannste dann ganz relaxed sagen, daß er Werte vom Empfänger
holen soll.
Sind dann 2 Zahlen, Fernbedienugsnummer, und Tastennummern.

Meine ganze Wohnung kann ich mit einer Frenbedienung steuern.
Baue grade ne selbstanlernbare IR-Relais-Box, die dann Steckdosen
ein/aus-schaltet.

Zugegeben, die Hirnleistung hat der Programmierer des RC5-Bausteins in
Bascom geleistet, aber der Nutzen davon ist super genial.

Bei weiteren Fragen, nur zu.

von Ithamar G. (antimon)


Lesenswert?

Heisst das der IR-Empfänger hängt nur an INT0 z.B.? Oder dient der
Interrupt nur dazu, den uC aufzuwecken, wenn Daten kommen, diese kommen
dann auf nem anderen Port rein?
Ich möchte halt mehrere Events einbinden, also Tastendrücke,
Fernbedienungssignale etc. die den uC aufwecken - habe aber nur zwei
Interrupts...

von DJShadowman (Gast)


Lesenswert?

hmhmhmhmhmhmhmhmhmhmh......................

von Martin (Gast)


Lesenswert?

Einfach die Interruptquellen über je über eine Diode an den INT-Pin
legen.

von Rahul D. (rahul)


Lesenswert?

Bei Atmel gibt es eine Application Note (AVR240 oder so ähnlich), die
die Verwendung einer 16poligen Tasten-Matrix an einem 90S1200 (oder so)
beschreibt. Da wird auch ein Interrupt-Pin für das Wecken des µC
benutzt.

Wenn du nichts weiter mit dem µC machen willst, sprich den zweiten
Interrupt-Pin übrig hast, würde ich den nehmen und auch gleichzeitig
das IR-Signal darüber analysieren.

Die beiden Kontakte zur Richtungswahl kannst du zwecks Wecken über
Dioden an den anderen Pin legen. Dann musst du nur noch herausfinden,
welcher der beiden betätigt wurde, also noch ein Eingangspin
(vielleicht auch noch ne Diode oder so, muß aber wohl nicht).
Den Reed-Kontakt würde ich an einen weiteren Pin legen, da der ja nur
während der Bewegung interessant ist. Ausserdem ist von dem ein
Interrupt eher unwahrscheinlich (Erreichen der Endposition durch
Polling feststellen).

Hat die Leinwand einen Ende-Schalter für "Ausgefahren"? Da man
Leinwände in der Regel in kompletter Grösse braucht, wäre es ja
sinnvoll, wenn das obere und das untere Ende vom Controller erkannt
würde.

Gruß Rahul

von DJShadowman (Gast)


Lesenswert?

Der RC5 Befehl beherbergt ja ne Menge Intelligenz, die Dinge tut, von
denen "man" nix mitbekommt.
Ich bin mir auch nicht sicher, ob das PRG an der Programmstelle wartet,
bis RC5 kommt, oder da nur rüberpollt.
Also es ist zumindest immer pind.2 der Int0 der verwendet wird.
Muss anscheinend int0 sein.

Das Signal ist ja seriell, kann sein, daß da ein Int für jede 1
gebraucht wird.

Was ich mit Sicherheit sagen kann ist, daß man keine Timer freilassen
muss.
Ich benutze den Mega8 und davon alle drei PWM Kanäle, also Timer0 und
1.
Und kann per Fernbedienung alle drei Kanäle hoch und runter fahren, ist
ne RGB steuerung für einen PlexiglasTisch der mit 300 LEDs bestückt
ist.
(Das so am Rande)

von DJShadowman (Gast)


Lesenswert?

Achja, ich Esel.
Versabbel mich hier, und vergesse die Antwort auf die Frage:
JA, es wird NUR der Int0 als EIngang verwendet.

Siehe Beispiel in Hilfe Bascom zum Thema getrc5
Da ist auch das benötigte Empfängerbauteil beschrieben etc.
Muss 36kHz Trägerfrequenz haben....

von Ithamar G. (antimon)


Lesenswert?

Ah okay, danke für die Tips!

Also als Empfänger dient der TSSOP1736, der mir ja freundlicherweise
das Signal demoduliert.
Wie ist das eigentlich, wenn eine Fernbedienung nicht RC5 kann? Sendet
die dann auch auf ner anderen Frequenz oder unterscheidet sich nur der
Codeaufbau von RC5? Oder vielleicht beides?

Noch eine Frage zum Sender: Für den nehme ich ja einen PWM-Kanal her,
der mir die 36kHz erzeugt und durch Ein-/Ausschalten des Ausgangs
moduliere ich quasi das Signal auf, richtig? Ist es da egal welchen
PWM-Kanal man nimmt, oder ist da einer besser geeingnet als ein
anderer? Und dann müsste ich quasi noch mit nem Transistor (BC337 oder
so?) die IR-LED ansteuern...?

@Rahul:
Geplant habe ich eigentlich nur einen Reed-Kontakt, wenn die Leinwand
eingefahren ist. Und mit einem Schrittmotor lasse ich die LW einfach ne
vorgegebene Anzahl Schritte runterfahren. Und dann natürlich wieder
hoch.
Der Sensor ist eigentlich nur da, bei Stromausfall, Überspringen von
Schritten, o.ä. die Position 0 zu erkennen (die Leinwand fährt rein,
bis ein Signal kommt) und dann abzuschalten.
Danke übrigens für den Tip mit der Application Note, die werd ich mir
mal genauer ansehen!

von DJShadowman (Gast)


Lesenswert?

hm, wie man sendet weiß ich nicht ausm Kopf.....
Is das so, man braucht nen PWM Kanal ?????????? EIn RC5 Code hat ja mit
PWM nicht viel zu tun.....
Ich hab hier ne Universal FB, das ist ausreichend, und einfacher.

Der RC5 Code ist ein ganz be"sonderes" Protokoll.
Ergo: Nicht nur die Trägerfreqenz ist anders.
Entweder RC5 oder nix.
Allerdings habe ich irgendwas gelesen, daß das neue Bascom wohl auch
nen Sony Code oder so macht, mussich mal inne Befehlsliste schauen.

von Ithamar G. (antimon)


Lesenswert?

Also nein, ich habs falsch rübergebracht - den Port braucht man als
Frequenzgenerator für die 36 kHz, hat mit Output Compare, oder
dergleichen... und den schaltest du an und aus, was dann die Bits des
Codes repräsentiert.

Im Übrigen nutze ich kein Bascom, deswegen muss ich wohl oder über
alles in Assembler machen, aber das sollte ja kein Problem sein,
gewusst wie.

Wenn das verschiedene Frequenzen / Codes sind - wie machen das die
lernbaren Fernbedienungen? Mehrere Sender/Empfänger?

von DJShadowman (Gast)


Lesenswert?

Die lernbaren, also Die, wo man eine alte vorlegen kann, und die sich
das merkt, die machen das sicher so, daß sie erstmal alles empfangen.
ALso auch keinen vorgeschalteten 36kHzFiltre haben.
die haben einfach ne Fotodiode drin.
Also wird quasi die gesamte Sequenz "aufgenommen".
Dann kann die selbst entscheiden denke ich, welche Trägerfrequenz das
ist, und merkt wohl auch, ab wann sich die Sequenz wiederholt.

Rein theoretisch kann sie natürlich schön doof einfach alles was sie
empfängt aufzeichnen und wiedergeben, ohne den eigentlich übertragenen
Wert zu speichern.
Aber das würde sicher Mem kosten.

von Ithamar G. (antimon)


Lesenswert?

Mit LIRC kann ich ja auch FB-Codes lernen - kann ich die irgendwie
aufnehmen und dann die Sequenzen als Bitmuster auf meinen µC spielen?
Ich bräuchte nur ein paar Kommandos, die ich aufnehmen müsste, Speicher
sollte nicht das Problem sein, mit den paar Zeilen Code ist mein Atmega8
eh unterfordert...

Es soll nur funktionieren, dass ich FB-Codes empfange (z.B. Leinwand
auf/ab) und an einen optionalen, hoffentlich bald vorhandenen, Beamer
Codes schicke (z.B. Beamer an/aus).
Ich habe quasi eine FB die meinen µC steuert und der arbeitet dann
Makros ab, also z.B. auf Knopfdruck Leinwand ab, Beamer an, Licht
aus...

von DJShadowman (Gast)


Lesenswert?

Das ja kein Thema.
Viele Beamer habn doch ne RS232 zum steuern......
Und solange deine FB RC5 macht, musste nix aufzeichnen.

Nimmste ne Universal-FB programmierst irgendein Gerät ein, daß RC5
macht (zb Panasonic oder ähnlich, schau Liste) und dann schließte nen
LCD an uC an, und lässt dir ersma mit nem billigen PRG anzeigen,
welchen 2 Werte deine FB bei welchem Tastendruck erzeugt.

Die Werte verwendest Du dann in deiner programmierten Steuerung, und
über RS232 Kommandos kannste den BEamer steuern.

Siehe auf meiner Homepage, ich hab nen kleinen Kaste ngebaut, der zeigt
mir an, welche Werte meine FB macht.
Und ich hab ne Lernbare Box gebaut, die 20 Steckdosen schaltet, einfach
den empfangenen Wert einmalig im EEROM speichern, und dann zum Vergleich
immer hernehmen lassen, so bleiben die Werte auch erhalten, bei
Stromausfall etc.
Und ich kann nach belieben neu anlernen, muss allerdings ne RC5 sein.

Schauste www.DO2SHA.de

von Janik Langenberg (Gast)


Lesenswert?

Hab das gleiche bei mir vor.
wie bau ich denn ne fernbedienung selber? keine gekaufte. die soll ja
nur taste für hoch und eine für runter haben?

von Ithamar G. (antimon)


Lesenswert?

Willst du dir komplett eine eigene Fernbedienung bauen? Funktionieren
tuts natürlich, aber ich schätze es ist günstiger, ne billige fertige
zu kaufen oder ne alte dafür zu verwenden. Oder du nimmst eine von der
Steroanlage oder so, die noch zwei Tasten frei hat - dann hast du nicht
noch ein Teil rumliegen...

Meine Idee war, nur meine Steuerung per Fernbedienung anzusprechen, und
der Controller fährt dann quasi ein Makro ab - Leinwand runter und dann
eben die Fernbedienungscodes für den Beamer senden zum Einschalten,
einstellen oder so.
Sonst müsste ich den Beamer einschalten und die Leinwand extra
ansteuern, und das wollte ich zusammenfassen...

von Peter D. (peda)


Lesenswert?

"Dabei soll das Ganze möglichst effizient und stromsparend realisiert
werden - wenn ich mit µCs arbeite, dann gescheit!"


Das ist Mumpitz.

Ich gehe mal davon aus, daß die Leinwand für einen Beamer ist mit
mehreren 100W Leistung. Was soll es dann für einen Sinn haben, mit ein
paar mW zu geizen ?

Da sind ja die Wirbelstromverluste im Netztrafo schon viel höher und
ein LM7805 möchte ja auch um die 10mA haben.
Die Stromsparmodi des MC haben nur bei Batteriebetrieb einen Sinn.


Gescheit ist nur dann jemand, wenn er eine Sache dort anwendet, wo sie
auch effektiv was bringt.

Vergiß also die Stromsparmodi und frage Tasten bzw. RC5 im
Timerinterrupt ab, wo man sie zweckmäßiger Weise gleich mit entprellen
bzw. dekodieren kann.


Peter

von Ithamar G. (antimon)


Lesenswert?

>Ich gehe mal davon aus, daß die Leinwand für einen Beamer ist mit
>mehreren 100W Leistung. Was soll es dann für einen Sinn haben, mit
ein
>paar mW zu geizen ?

Ganz einfach: Erfahrung - auch wenn ich da nicht unbedingt auf jedes µA
schauen muss, so kann ich trotzdem was lernen und das in z.B. nem
Batterieprojekt einsetzen.

Ausserdem - das Teil wird vermutlich irgendwann per Akku gespeist, da
die Netzteile eben immer Verluste haben und ich per Solarpanel die
Energie "umsonst" bekomme - und selbst wenn man genügend hat, muss
man damit ja nicht verschwenderisch umgehen...

von Peter D. (peda)


Lesenswert?

"Ausserdem - das Teil wird vermutlich irgendwann per Akku gespeist, da
die Netzteile eben immer Verluste haben ..."


Bloß haben Akkus eine hohe Selbstentladung und einen viel schlechteren
Wirkungsgrad als Trafos.
Die Standardladung ist ja 1,4...1,6-fach (14..16h mit I/10) und bei
Schnellladung siehts noch düsterer aus.


Wenn Du aber unbedingt den Power-Down-Modus ausprobieren willst, nimm
einen AVR mit PCI (Pin-Change-Interrupt), d.h. sobald sich an
irgendeinem Pin was ändert, wacht er auf und Du kannst über den
Timerinterrupt das Ereignis auswerten.

D.h. Du schreibst und testest das Programm erstmal ganz normal und
fügst, nachdem alles richtig läuft, nur den Power-Down-Mode und den PCI
zum Aufwachen mit hinzu.


Peter

von Janik (Gast)


Lesenswert?

Und wie niste ich sowas auf ner anderen fernbedienung ein?
und hat mal einer ne zusammenfassung? sowas wien schaltplan für das
ganze projekt hier? steig nich durch :(

von Ithamar G. (antimon)


Lesenswert?

Also ne Projektzusammenfassung:

Es soll eine Leinwand, die ursprünglich per Handkurbel auf- und
abgerollt werden konnte, auf einen Motorantrieb umgestellt und von
einem Mikrocontroller aus angesteuert werden.
Dabei soll das Auf- und Abfahren neben Tastern auch per Fernbedienung
beeinflusst werden. Und da man eh schon nen Mikrocontroller benutzt,
kann der dann gleich auch den Beamer fernsteuern.
Soll heissen: Ich drücke eine Taste auf der Fernbedienung, die Leinwand
fährt runter, der Beamer geht an, und nach ner Zeit (wenn der Beamer
warmgelaufen ist) geht das Licht im Zimmer aus und der Beamer
übernimmt.
Beim Ausschalten läuft das Ganze andersrum.

Jetzt zu den Fernbedienungen: Ich hab für meine Anlage eine
Fernbedienung die zig Geräte steuern kann. Ein Teil der Tasten ist wie
bei vielen Fernbedienungen keiner Funktion am Gerät zugewiesen, so dass
ich die für meine Steuerung verwenden kann.
Der Beamer soll aber auch gesteuert werden, aber ich möchte nicht extra
noch eine Fernbedienung für den Beamer verwenden müssen, also übernimmt
der Mikrocontroller das. Der bekommt einmal die Befehle der Beamer-FB
gelernt und in Zukunft schickt er die dann raus, wenn die Leinwand
bedient wird.

Hoffe das war verständlicher ;)

von Janik (Gast)


Lesenswert?

Unglaublich, was alles möglich ist.
ist sollte das am besten studieren!
wie heißt das ganze? wo sollte ich mich bei der uni eintragen? :)

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.