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


von Anfänger (Gast)


Lesenswert?

hallo,

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

ich dachte an sowas..
1
ldi r16, 0b00000000
2
out DDRB, r16
3
4
main:
5
in r16, PINB
6
sbrs r16, 3
7
rjmp main
8
rjmp daten1
9
10
daten1:
11
sbi PORTC, 0
12
cbi PORTC, 1
13
sbi PORTC, 2
14
cbi PORTC, 3
15
sbi PORTC, 4
16
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 ????

von Randy N. (huskynet)


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).

von Peter D. (peda)


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

von Anfänger (Gast)


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 ..

von Roland Praml (Gast)


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

von Anfänger (Gast)


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

von dernixwois (Gast)


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 ;-)

von Roland Praml (Gast)


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=Njc5OTgxOTk=

Gruß
Roland

von Anfänger (Gast)


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

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.