Hallo,
soo, Anhang ist wie immer unten:
Nicht böse sein, aber das mit dem ISP würde mich komplett verwirren, denn ich habe eine einfache 5pol. Steckerleiste, und deswegen habe ich deinen Vorschlag ganz frech ignoriert
Ich hab jetzt genau meinen ISP reingezeichnet, aber das könnt ihr auch getrost ignorieren...
versuch mal den hier ...
5polig
und da wo der ist, gibt es noch hunderte
Das mit GND und VCC war ne gute Idee, hätte ich auch eigentlich selbst drauf kommen können
zum Schaltplan da ist mir nur aufgefallen dass die GNDs kreuz und queer liegen ^^
versuch dir anzugewöhnen dass die gands nach unten gehen, weil sonst ist das einfach urgs *gg* (lt normen solltest es auch so machen und nicht 90° verdreht oder gar 180° ...
*einfach mal so als einwand*
Da hat bluelight irgendwie Recht ... Aber wen ich ehrlich bin, ist es bei mir
auch in allen möglichen Richtungen (Außer nach oben)
Ich hab jetzt ISP und LCD-Datenleitungen auf den gleichen Pins, wie du es empfohlen hast, was ja durchaus gut ist --> Pins sparen
aber etwas anders als ich mir das gedacht habe ...
Bei Dir ...
D4 -- PB2
D5 -- PB3
D6 -- PB4
D7 -- PB5
RS -- PB0
E -- PB1
ich würde das so machen ...
D4 -- PB0
D5 -- PB1
D6 -- PB2
D7 -- PB3
RS -- PB4
E -- PB5
Sieh dir mal die Bits auf dem AVR-Port und die vom Display an ...
Wenn man ein Byte an das LCD sendet dann zerlegt man im 4Bit-Modus
das Byte in die 2 Nibbles ... ->
D0..3 / D4..7
also einmal in der Mitte getrennt.
dann muß man nur noch das entsprechende Nibble auf den Port legen und
fertig. Da du aber die PortBits 2..5 verwendest müßte man das Nibble noch
um 2Bit verschieben (0..3 -> 2..5) also zusätzliche Arbeit im Programm.
RS und E werden sowieso direkt mit Set/Clear direkt angesprochen. Da ist
es egal wo die angeschlossen sind.
Durch eine kleine Änderung bei den Anschlüssen kann man sich also
Programmierarbeit sparen
verstanden ?
Ich hab jetzt nochmal ein paar generelle Fragen:
- Sind die Pins für PWM fest zugeordnet oder nicht? (also, z.B. OC1A, OC1B). Ich meine da mal was gelesen zu haben. Dann müsste ich evtl. meine LCD Pins doch noch woanders dran hängen..
- Und wenn ich einen Timer als Counter benutzen will, muss ich dann die T0 (...) Pins benutzen?
Da hast du wohl recht ... also nochmal ummodeln ...
T0 ist der externe Eingang des Timers 0. Brauchst du nicht für PWM.
Identische Probleme ...
- I2C-Bus ? (PC4,5)
- UART ? (PD0,1)
- ADC ? (PC0...5)
Empfehlung ...
PD0,1 (RxD,TxD) => RS232 - würde ich freihalten (zum PC)
PD4,5,6,7 => LCD D4,5,6,7 damit ist das Nibble nicht mitten im Byte
PB1(OC1A),PB2(OC1B),PB3(OC2) => PWM + ISP(PB3)
PB4,5 => LCD RS,E + ISP
PC4,5 (SDA,SCL) => I2C (zB EEPROM, RTC, ...) würde ich auch freihalten
jetzt ist noch PC0..3 (ADC0..3) , PD2,3 (INT0,1) und PB0 frei
je nachdem ob noch analoge Eingänge oder externe Interrupts benötigt
werden kann man da das entsprechende dransetzen.
Mit Trick7 könnte man in der Zeit, wenn man das LCD nicht anspricht die
Datenpins auf Eingang schalten und da drüber die Taster abfragen die man
über nen anderen Pin dann aktiviert (spart bei 4 Tasten 3 Pins
). Aber
für Programmieranfänger nicht zu empfehlen da => Gehirnkrebs bei Problemen.
Also ich meine das so ...
+-----|<------/ ----PD4
+-----|<------/ ----PD5
+-----|<------/ ----PD6
+-----|<------/ ----PD7
+-------------------PB0
PB0 ist normalerweise auf High => Tasten wegen den Dioden ausgeschaltet.
PD4..7 auf Eingang und interne PullUps einschalten, dann PB0 auf Low =>
damit sind die Tasten aktiviert. Drückt man eine Taste, wird er entsprechende
PD4..7 auf Low gezogen. Und schon sind einige Pins gespart
Dadurch
muß man aber beim ansprechen des LCDs und der Tasten genau aufpassen
sonst gibts Datensalat.
Hier mal ein Beispielplan wie ich mir das so gedacht habe ...
Gruß
Dino