Forum: Mikrocontroller und Digitale Elektronik intelligente Porterweiterung mit Atmega16


von A. S. (rava)


Lesenswert?

Hallo,

ich suche nach einer Möglichkeit, eine Menge Drehencoder mit je 1 
LED-Kranz anzusteuern. Ich benutze eine fertige DIY-Software, die (eine 
leider recht begrenzte Zahl) Schieberegister verwendet.

Also muss ich den LED-Kranz codieren - für 63 LEDs brauche ich dann nur 
noch 8Bit, da er sich wie ein Bargraph verhalten soll (mit 63 LEDs zeigt 
man 64 verschiedene Werte an, keine Lücken).
||||||||||-----
|||||----------
|||||||||||||||

Da kam mir die Idee, einen kleinen uC, etwa nen atmega als I/O 
Porterweiterung zu gebrauchen, der dann genau für einen Encoder+Kranz 
zuständig wäre. Er müsste bei einer Latch-Clock-Flanke 1 Byte aus dem 
seriellen Datenstrom aufnehmen (LEDs) und 1 Byte in den seriellen 
Datenstrom zurückgeben (Encoderwerte)
Die Idee:
- die LEDs werden gemultiplext (8x8... vllt auch nur 31=8x4)
- Encoder+Taster werden gepollt, entprellt und die Daten hübsch 
aufbereitet (in 1 Byte ist ja viel Platz für Flanken- und Statusbits)

Wenn ich das mit diskreten ICs mache, brauch ich viel Platz auf der 
Platine, bin weniger flexibel und es ist nur unwesentlich günstiger (595 
sind teuer!)

Da ich so etwas noch nie gemacht habe bleiben zwei Fragen:

1. Später möchte ich eine stattliche Zahl solcher Encoder verbauen (vllt 
32?). Also brauche ich eine stattliche Zahl solcher Atmegas, die alle 
mit demselben Programm laufen. Wie kann ich die also alle programmieren?
Von JTAG habe ich viel Schlechtes gehört und außerdem unterstützt das 
mein recht exotisches Programmerkabel nicht.
Gibt es vielleicht eine TQFP-Fassung, in der man die atmegas vor dem 
Verlöten programmieren kann? Oder muss ich dafür die DIL-Version + 
Fassungen verwenden? Ich möchte am Ende nicht alle Nase lang 
Programmierpfostenleisten aus meiner Platine herausstehen haben.

2. Hier laufen 2 Uhren. Der Takt des Mastergeräts muss nicht zwingend 
mit dem meines atmegas übereinstimmen - vor allem, wenn ich interne 
Oszillatoren verwende. Wie stelle ich die Synchronisierung sicher? Kann 
ich darauf vertrauen, dass das SPI des Atmegas im Slave-Betrieb keine 
Fehler macht? Wäre schade, wenn da ein paar Bits verschluckt würden.

Die Frage ist warscheinlich doof und die Sache, die ich hier machen 
möchte absoluter Standard. Aber ich muss erst meine Platine layouten 
bevor ich mit Testen (=Erfahrung sammeln) anfangen kann. Da wäre es 
schon wichtig zu wissen, wie ich das verdrahten muss, dass es sicher 
läuft (und va. ob ich einen externen oszillator brauche).

von avr (Gast)


Lesenswert?

A. S. schrieb:
> 595
> sind teuer

wo kaufst du die denn?

http://www.tme.eu/de/details/74hc595d/ttl-logik-schaltkreise/nxp/#
< 14ct ab 25+

Da bekommst du 25 STück für deinen Mega16.

von A. S. (rava)


Lesenswert?

der mega16 kostet beim R 2,75... ich habe gerade sogar gesehen, dass ich 
auch auf nen mega8 hin komme. Den gibt's für 1,55. Aber wenn ich das 
nicht mit uC mache, brauche ich noch eine diskrete Schaltung zur 
Dekodierung der Werte
0000 0000 = 0000 0000 0000 0000 0000 0000 0000 0000
0000 0001 = 1000 0000 0000 0000 0000 0000 0000 0000
0000 0010 = 1100 0000 0000 0000 0000 0000 0000 0000
0000 0011 = 1110 0000 0000 0000 0000 0000 0000 0000
0000 0100 = 1111 0000 0000 0000 0000 0000 0000 0000
...

Wenn du dafür eine günstige Lösung hast, melde dich.
Abgesehen davon kommen noch die Eingänge dazu...
Und die Gefahr beim Löten etwas zu verhauen ist bei einem Chip deutlich 
geringer als bei 5.



hat jemand eine Antwort zu der Frage, die ich eigentlich gestellt hatte?

von Karl H. (kbuchegg)


Lesenswert?

A. S. schrieb:

> Da ich so etwas noch nie gemacht habe bleiben zwei Fragen:
>
> 1. Später möchte ich eine stattliche Zahl solcher Encoder verbauen (vllt
> 32?). Also brauche ich eine stattliche Zahl solcher Atmegas, die alle
> mit demselben Programm laufen. Wie kann ich die also alle programmieren?
> Von JTAG habe ich viel Schlechtes gehört und außerdem unterstützt das
> mein recht exotisches Programmerkabel nicht.
> Gibt es vielleicht eine TQFP-Fassung, in der man die atmegas vor dem
> Verlöten programmieren kann? Oder muss ich dafür die DIL-Version +
> Fassungen verwenden? Ich möchte am Ende nicht alle Nase lang
> Programmierpfostenleisten aus meiner Platine herausstehen haben.

Na ja. Gibt ja auch noch andere Lösungen.
Zum Beispiel 5 Pads am Platinenrand auf die man eine Art Wäscheklammer 
aufsetzt, auf der die Gegenstücke sind und die den Kontakt zum 
Programmer herstellen.
Ich glaub bei Hannes wars, bei dem ich mal einen improvisierten Stecker 
sah, gefertigt aus Stiftleisten und der direkt auf den µC gesteckt wird 
und so die Kontakte herstellt.
Und zur Not: 5 Kabel kurzfristig an strategischen Punkten auf der 
Platine anlöten, den µC programmieren, kurz antesten, Kabel ablöten. Bei 
32 Platinen geht das noch.

> 2. Hier laufen 2 Uhren. Der Takt des Mastergeräts muss nicht zwingend
> mit dem meines atmegas übereinstimmen - vor allem, wenn ich interne
> Oszillatoren verwende. Wie stelle ich die Synchronisierung sicher? Kann
> ich darauf vertrauen, dass das SPI des Atmegas im Slave-Betrieb keine
> Fehler macht? Wäre schade, wenn da ein paar Bits verschluckt würden.

Das klappt schon.
Die SPI im ATMega ist im Grunde ja auch nichts anderes als ein 
Schieberegister. Genau wie dein 595.

> möchte absoluter Standard. Aber ich muss erst meine Platine layouten
> bevor ich mit Testen (=Erfahrung sammeln) anfangen kann. Da wäre es
> schon wichtig zu wissen, wie ich das verdrahten muss, dass es sicher
> läuft (und va. ob ich einen externen oszillator brauche).

Steckbrett ist unmodern?
Ehe ich für etwas eine Platine mache, test ich das erst mal am 
Steckbrett oder auf einer Lochrasterplatine - mit dem µC in DIL Form 
versteht sich. Musst ja nicht alle LED aufbauen. mit ein paar kann man 
das Ganze prinzipiell ja genausogut testen.

von avr (Gast)


Lesenswert?

A. S. schrieb:
> Wenn du dafür eine günstige Lösung hast, melde dich.

Wenn du bei reichelt kaufst wird es fast immer teurer. Ich verwende am 
liebsten den Attiny24, da er bei tme weniger als 70ct kostet. Den 
Atmega48 gibts für 1,10€. Das ist aber deine Sache.

Eine Möglichkeit wäre es den Attiny24 + Schieberegister zu verwenden. 
70ct + 8*14ct = 1,82€. Dazu kannst du für die Eingänge ein paar 74hc165 
nehmen.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

A. S. schrieb:
> Wie kann ich die also alle programmieren?
> Von JTAG habe ich viel Schlechtes gehört und außerdem unterstützt das
> mein recht exotisches Programmerkabel nicht.

Du kannst ja auch nen Bootloader implementieren. Das geht im Extremfall 
sogar mit nur einem Portpin.

von Thomas E. (thomase)


Lesenswert?

Magnus M. schrieb:
> Du kannst ja auch nen Bootloader implementieren. Das geht im Extremfall
> sogar mit nur einem Portpin.
Und wie kommt der darauf?

mfg.

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.