Forum: Mikrocontroller und Digitale Elektronik Frage zu SPI-LCD plus PWM Mega8/Tiny25


von Markus (Gast)


Lesenswert?

Hallo,
um vor allem beim Tiny25 ein LCD betreiben zu können, dachte ich an die
hier gängige Lösung ein 74HC164 Schieberegister via SPI anzuhängen.
Allerdings benötige ich die PWM Kanäle, die sich ja einige Pins
teilen.
Beim Mega8 wären das die Pins PB2(SS/OC1B), PB3(MOSI/OC2) und beim
Tiny25 PB0(MOSI/OC0A), PB1(MISO/OC0B).
Meine Frage ist nun, wie sich die PINs verhalten ?
Sagen wir ich lasse einen Timer für die LCD Ausgabe alle 20ms ins
SPI-Register den auszugebenden Wert schreiben (ähem ich meine natürlich
die gesamte Sequenz ;) ), meine PWM soll aber gleichzeitig einen z.B.
1kHz Rechteck ausgeben, kommt sich das ins Gehege ?
Weil ich werde aus dem Datenblatt irgendwie nicht schlau :(
Stoppt ein SPI Event nun die PWM, oder muß ich sie selbst stoppen damit
ich SPI Ausgabe ermöglichen kann ?
Für die Ausgabe auf den 164er dachte ich an eine einfache Gluelogik,
die erkennt ob SCK eine Frequenz liefert oder nicht.
Ich wollte vornehmlich den Tiny25 für die PWM Erzeugung mit LCD-Ausgabe
einsetzen, die Frage nach dem Mega8 in dem Zusammenhang liegt an
Pinsparwollenhabenmehr lol
Wenn es keine Möglichkeit gibt eine PWM mit dem Tiny25 bei max. 1kHz
inklusive LCD-Ausgabe mit 164er Schieberegister quasi gleichzeitig zu
realisieren, muß ich halt einen größeren µC (z.B. Mega8) nehmen.
Meine erste Idee war die PWM auf die doppelte Frequenz zu bringen und
dann statt jedesmal einen PWM Wert auszugeben ein SPI Event daraus zu
machen, nur hat die SPI ja ihren eigene Clock-Master ...
Hat vielleicht jemand eine Idee, um es doch noch zu realisieren ?
Vielen Dank,
Markus

von Bernhard S. (bernhard)


Lesenswert?

Hallo Marcus,

Warum so kompliziert, der Tiny25 hat doch 16 I/O,
Dein LCD benötigt sicherlich nur 6 I/O
da bleiben doch noch genügend I/O übrig.

PWM an irgend einem I/O lässt sich doch softwaemäßig sicherlich
realisieren, oder?

Bernhard

von Markus (Gast)


Lesenswert?

@Bernhard Schulz (Bernhard)
Du verwechselst da den Tiny26 PDIP20 (16 IO) mit dem Tiny25 PDIP8 (6
IO) ;)

Da anscheinend noch niemand so etwas zum laufen gebracht hat, werde ich
wohl die Tiny25 gegen Tiny2313/Mega8 austauschen müssen ...
Danke trotzdem,
Markus

von Bernhard S. (bernhard)


Lesenswert?

>Du verwechselst da den Tiny26 PDIP20 (16 IO) mit dem Tiny25 PDIP8 (6
>IO) ;)

Hmm,... da hab' ich wohl versehentlich
das falsche Datenblatt befragt, sorry


>Tiny25 gegen Tiny2313/Mega8 austauschen müssen ...

was hältst Du von dem Vorschlag:

- 5 Leitungen vom LCD (1xRS 4xDaten) werden
  über 3 µC-Pins und einem 4 zu 16 Dekoder-IC versorgt
- 1 Leitung vom LCD (Enable) direkt an  1-µC-PIN

... bleiben noch 2-PINs für PWM o.ä. übrig

Nachteil: ein zusätzlicher IC

Bernhard

von Markus (Gast)


Lesenswert?

@Bernhard
Es geht bei meinem Problem darum, das ich einige Fahrtregler auf Tiny25
Basis habe, die alle 4 Hardware-PWMs nutzen.
Es sind also nur 2 Pins noch verfügbar, wo momentan zwei Taster zur
Einstellung hängen.
Um nun zu sehen, wie die Regler eingestellt sind, wollte ich die
gängige Methode nehmen via 164er Schieberegister und SPI ein LCD
anzuhängen.
Dazu würde ich die drei Leitungen des SPI des Controllers nehmen und
die auszugebenden Daten einfach ins SPI Register und gut ist ;)
Beispiel hierfür findest Du in der Codesammlung, z.B.:
http://www.mikrocontroller.net/forum/read-4-21765.html#new
Eine Huckepackplatine ist schnell bestückt und auf die bestehenden
Lochrasterkarten gesetzt.
Das Problem ist nicht die Hardware, sondern wie ich es hinbekomme, das
das PWM Signal parallel zum SPI Signal weiterläuft.
Denn das MOSI brauch ich dafür und dessen Pin wird von der Hardware PWM
belegt ...
Die Motoren können ja nicht einfach stehenbleiben, wenn auf's LCD
ausgegeben wird.
OK ist bei höheren Drehzahlen kein Thema wegen Trägheit, nur bei extrem
langsamer Drehzahl/Leistung wird's kritisch ...
Die Huckepack-Lösung wäre halt eleganter gewesen, weil sie auch auf
beliebige andere SPI fähige Schaltungen hätte angewendet werden können
;)
So muß ich nun die PWM der Tiny25 auf den Tiny2313 umändern und dort
direkt ein LCD anklemmen.
Danke trotzdem,
Markus

von Bernhard S. (bernhard)


Lesenswert?

>Das Problem ist nicht die Hardware, sondern wie ich es hinbekomme, >das
das PWM Signal parallel zum SPI Signal weiterläuft.

... PWM kan problemlos deaktiviert werden,
wenn SPI aktiv sein muss, das wäre möglich, muss vielleicht sogar
gemacht werden.

Aber was ist mit den Motoren wenn für einige ms an den PWM-Pins
verschiedene Schaltzustände anliegen?

Fährt das Auto plötzlich los?  ;)  Fehlstart => Disqualifikation

Wie wird das PWM-Signal weiter aufbereitet, geht das Rechtecksignal
direkt auf die Motoren, oder wird die Spannung durch ein RC-Glied
geglättet?

Bernhard

von Markus (Gast)


Lesenswert?

OK,
mal wieder ASCII-Schaltplan lol


+------+
|      |--PWM1(PinPB0)--[Tiefpaß]--[Transistor]---[Motor]
|Tiny25|--PWM2(PinPB1)--[Tiefpaß]--[Transistor]---[Motor]
|      |--PWM3(PinPB3)--[Tiefpaß]--[Transistor]---[Motor]
|      |--PWM4(PinPB4)--[Tiefpaß]--[Transistor]---[Motor]
+------+
 |   |
 |  [Taster](PinPB2)
[Taster](PinPB5)

Die Doppelbelegung ist dann wie folgt:
PinPB0 = PWM1 = MOSI
PinPB1 = PWM2 = MISO
PinPB2 = Taster = SCK

Für die 164er Schieberegister-Lösung wären drei Pins erfordelich:
SCK/PB2    -> Clock für's 164er
MOSI/PB0   -> serielle Daten
En/PB5     -> LCD enabled

Wobei ich mir überlegt hatte durch zusätzliche Gluelogik das SCK-Signal
für's disablen des LCDs zu "mißbrauchen" ;)
Aber da ich ja noch einen Pin ohne PWM frei habe, braucht's das nicht
;)

Es käme also die folgende Schaltung heraus:

+------+
|      |--+-PWM1(PinPB0)--[Tiefpaß]--[Transistor]---[Motor]
|Tiny25|--|-PWM2(PinPB1)--[Tiefpaß]--[Transistor]---[Motor]
|      |--|-PWM3(PinPB3)--[Tiefpaß]--[Transistor]---[Motor]
|      |--|-PWM4(PinPB4)--[Tiefpaß]--[Transistor]---[Motor]
+------+  |
 |   |    |MOSI+-----+        +-----+
 |   |    +----|     |        |     |
 |   +---------|HC164|---/8---| LCD |
 |   |     SCK |     |        |     |
 |   |         +-----+        +-----+
 |   |                          | enable
 +------------------------------+
 |   |
 |  [Taster](PinPB2)
[Taster](PinPB5)

Wobei mir da gerade auffällt, das ich einen Denkfehler habe :(
Denn sobald PB5 wieder Eingang ist, ists Essig mit enable :(
Doch wieder Gluelogik mit FF o.ä. ...
Ich glaube es ist doch sinnvoller die größeren Tiny2313 zu nehmen ;)
Aber das ist doch eine echte HErausforderung, oder ;)
Danke,
Markus

von Bernhard S. (bernhard)


Lesenswert?

Markus, da haste Dir aber jetzt eine ganz schöne Mühe gemacht,
Respekt.

Ich denke gerade, dass dieses Prinzip nicht funktionieren wird.

Begründung:

- der HC 164 bekommt im normalen PWM Betrieb die unterschiedlichsten
Signale angeboten (PWM+TASTEN), er kann dann nicht mehr unterscheiden,
ob es ein PWM oder ein SPI Signal ist.

- das LCD bekommt durch einen Tastendruck jedes mal ein Enable und das
ist im 4 Bit-Bodus denkbar äußerst sehr ungünstig ;)

Wobei das lustige Zeichenspiel auf dem LCD wäre sicher mal
interessant.

>Ich glaube es ist doch sinnvoller die größeren Tiny2313 zu nehmen ;)

Ja, Du hast mich eben beeindruckender weise seh gut davon überzeugt ;)

Gruß

Benhard

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.