www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 Microcontroler 10 Schalter 10 Leds wenige leitungen?


Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich will mit 10 schaltern und wenig steuerleitungen 10 Leds anschalten 
.. problem ich stehe am anfang ...

ich dachte an sowas..

ldi r16, 0b00000000
out DDRB, r16

main:
in r16, PINB
sbrs r16, 3
rjmp main
rjmp daten1

daten1:
sbi PORTC, 0
cbi PORTC, 1
sbi PORTC, 2
cbi PORTC, 3
sbi PORTC, 4
rjmp main


sind dann 5 leitungen dann einem 2ten µC beibringen.. das er schalten 
soll wenn

PORTC, 0
PORTC, 2
PORTC, 4

am eingang high sind


geht sowas ? oder sollte ich das ganze ganz anders angehen ????

Autor: Randy N. (huskynet)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, irgendwas will er damit sagen, nur was. Also wenn ich mit 10 
Schaltern 10 LEDs ein- und ausschalten will, hm, also mir würde da auch 
eine Lösung ohne Mikrocontroller einfalen...

Also wenn ich länger drüber nachdenke: meinst du, dass du 10 Schalter 
hast, die an einem µC angeschlossen sind, dieser ist (über eine 
vielleicht größere Entfernung) mit einem anderen µC verbunden, und an 
diesem anderen µC hängen die 10 LEDs. Und für die Verbindung willst du 
möglichst wenige Leitungen, ja? Also wenn das so ist musst du die 
Steuerbefehle seriell übermitteln, also nacheinander. Die einfachste 
Lösung wäre mit einer Ader möglich. Nimm einen Timer (siehe Datenblatt 
des µC) der dir beispielsweise jede Millisekunde ein Interrupt 
generiert. Jetzt wartest du, bis ein Schalter geschaltet wurde, und 
setzt den Pin, der zum zweiten µC geht auf HIGH und startest den Timer. 
Damit weiß der zweite µC, dass es jetzt los geht. Jetzt startet dieser 
auch einen Timer, auch wieder mit einer Millisekunde Wartezeit. Und nun 
gibst du pro Millisekunde im ersten µC einen Zustand eines Schalters 
aus. Angenommen Schalter 1 ist ein, Schalter 2 aus und Schalter 3 wieder 
ein. Dann gibst du im ersten Interrupt HIGH, im Zweiten LOW und im 
Dritten wieder HIGH aus. Das für alle 10 Schalter, und am Ende die 
Leitung wieder auf LOW setzen. Der zweite µC ließt währenddessen nach 
jeder Millisekunde den Zustand des Pins ein, und setzt die entsprechende 
LED. Im Endeffekt hast du somit 12 Bits übertragen (ein Startbit, 10 
Datenbits, ein Stopbit).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Randy N. wrote:

> Also wenn ich länger drüber nachdenke: meinst du, dass du 10 Schalter
> hast, die an einem µC angeschlossen sind, dieser ist (über eine
> vielleicht größere Entfernung) mit einem anderen µC verbunden, und an
> diesem anderen µC hängen die 10 LEDs. Und für die Verbindung willst du
> möglichst wenige Leitungen, ja? Also wenn das so ist musst du die
> Steuerbefehle seriell übermitteln, also nacheinander. Die einfachste
> Lösung wäre mit einer Ader möglich.

Ich würde der Konfusion des Fragestellers auch diesen Inhalt geben, 
damits einen Sinn macht.

Wenn dem so ist:

Nimm einfach die UART, also einen Draht.

Bei Tastendruck wird ein Code gesendet, z.B. 1..10, bei Loslassen ein 
anderer, z.B. 11..20.
Oder es werden einfach zyklisch alle 10 Codes gesendet.
Der Empfänger setzt oder löscht die Portpins entsprechend, fertig.


Peter

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn ich das richtig verstanden habe ...
tastet sozusagen der erste µF die zustände an den 10Pins ab

ON OFF OFF ON OFF ON OFF ON ON ON

WIRD zu mehr oder weniger zu Paket "startbit>>X 1001010111 X<<stopbit"

der zweite µC zerhackt es und gibts es an den PINS aus.. immer wenn ein 
zustand geändert wird wird ein neues paket geschickt
d.h. ich mus noch viel lernen
TIMER INTERUP Startbit stobbit ..

Autor: Roland Praml (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Machs mit der UART, dann brauchst dir um die Timer/Start/Stoppbits keine 
so großen sorgen machen, sondern nur wie man die Baudrate richtig 
konfiguriert und ein Zeichen ausgibt.

Um das Protokoll von Peter noch zu verfeinern würd ich anfangs die 
Tasten mit Buchstaben "durchnummerieren", also a-j
beim Drücken der Taste wird dann der enstprechende Großbuchstabe 
ausgegeben, beim Loslassen der Kleinbuchstabe.

Das hat den Vorteil, dass du die serielle Schnittstelle über nen MAX232 
an den PC anschließen kannst und mit Hyperterminal o.ä. belauschen 
kannso und so gleich im Klartext siehst, was über den Draht geht.

Ich schätze mal in ASM wird man für das "Sende"-Programm wohl um die 100 
Befehle brauchen und in C ca. 20-30 Zeilen

Wenn das dann klappt, kannst dich dann um den Empfangsteil kümmern.

Gruß
Roland

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich dachte es wär was einfaches für den anfang wird ja immer 
komplizierter...
ich versuchs mit UART soweit ich komme.. wenn was ist kann ich auf euch 
zurück kommen ?

100 befehle ich kann gerade mal 0,1% :-)

danke für den wegweiser...


gruß
Gast

Autor: dernixwois (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder versuchs mit I²C! zwei Drahttechnik für kurze Strecken ganz ok!
Allerdings müsstest Du dich in die Materie erst einlesen aber bei der 
UART Geschichte musst das ja auch tun ;-)

Autor: Roland Praml (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Anfänger,

was solls denn jetzt genau werden?

Es gibt ja schon (fast) fertige IC's für so was:

- Schieberegister, z.B CD4014 + CD4094 oder 74HC164 + 74HC595
Mit ein paar Taktgeber/Zähler kommst sogar ohne Controller aus, oder 
eben ein Controller + 74HC595 (->Stichwort AVR-Porterweiterung)

- dann gibts noch fertige IC's z.B. HT12E/D, haben allerdings nur 4 
Kanäle

oder evtl tut's auch so was:

http://www.pollin.de/shop/detail.php?pg=NQ==&a=Njc...

Gruß
Roland

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit so einem schieberegister scheint das auch ganz gut zu gehen man 
brauch dan 4 leitungen ... beim UART sind es dann glaub 3 +-Bus ? hab 
noch nix gelesen werd ich heute tun...

ich will schon was mit µC machen will bischen was lernen ... kommt zwar 
auch irgend wann in der schule mal dran aber das dauert mir zu lange....

dange

gruß
martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.