Hallo,
gerade habe ich den Schaltplan für mein erstes größeres Projekt
fertiggestellt. Da ich noch wenig Erfahrung habe, und bisher bei meinen
Eagle Schaltplänen die Pins an zwei Händen abzählen konnte, bitte ich
euch beim Layout um etwas Nachsicht ;) (Was nicht heißt, dass ich nicht
offen für konstruktive Kritik bin).
Könnt ihr bitte einmal drüberschauen und mir sagen, ob ihr irgendwelche
Fehler findet, und ob ich etwas verbessern kann?
Es geht darum, einen Raspberry Pi mit einem ATmega8 zu verbinden. Die
Kommunikation geschieht über die UART Schnittstelle des Pis.
Der uC stellt verschiedene Ein- und Ausgaben bereit:
* 4-Wege Schalter mit Pushbutton (SW1, unten rechts), der
Benutzereingaben empfängt. Der Schalter hängt mit dem "Common" Pin an
der Versorgungsspannung, und die einzelnen Zustände werden vom 74HC165
an den uC weitergeleitet. Jeder einzelne Zustand hat einen 10k Pulldown
gegen GND. Entprellt wird softwareseitig im uC.
* Intern wird ein 25LC080P SPI EEPROM für die nichtflüchtige
Datenspeicherung verwendet. Um den MISO Pin bei Nichtverwendung Tristate
zu halten, ist er an einem 74HC125 angeschlossen. Als CS dient dabei der
Port QB vom 74HC595.
* Ein Piezzo-Buzzer für Töne hängt am Pin QA des 595.
* Für die Datenanzeige verwende ich ein Nokia 5100 Display. Die
Displayspannung soll gedimmt werden können, und hängt deshalb an OC1B
vom ATmega. Der Displaycontroller wird über SPI angesprochen.
* Für die Programmierung wird die ISP Programmierschnittstelle
verwendet. Damit die Signale während der Programmierung sich nicht auf
die Bausteine am SPI Bus auswirken, sind die CS Signale von 25LC080P,
74HC165 und 74HC595 mit einem Pullup ausgestattet. Außerdem wird Pin G
vom 595 ebenfalls gegen die Versorungsspannung gezogen, damit die
Ausgänge standardmäßig Tristate sind.
* Der Raspberry verträgt nur 3.3V, der uC wird aber mit 5V betrieben, um
16MHz zu erreichen. Aus diesem Grund wird die Spannung vom TXD Pin des
uC mit einem Spannungsteiler auf knapp 3.3V gesetzt.
* Um zu erkennen, wann das Herunterfahren des Raspberrys beendet ist,
wird ein Trick angewandt: Der TXD Pin des Raspberries führt dann nämlich
keine 3.3V mehr, weswegen dieser Pin mit AIN1 verbunden ist, um mit dem
AC festzustellen, wann es so weit ist.
Vielen Dank für eure Mühe!
Wolfgang schrieb:> \CS (IC2.1) und Treiber-Enable (IC3A.1) sind nicht richtig verbunden.> Eigentlich sollte ERC da einen Fehler melden.
Stimmt, habe ich übersehen, danke!
Thomas schrieb:> R3 und R2 sind viel zu klein
Hmm, ausgehend vom Artikel Spannungsteiler dachte ich
Wo liegt mein Fehler?
Michael schrieb:> Abblockkondensatoren auf VCC fehlen
Sind die bei allen ICs notwendig, oder nur für den ATmega?
>> Wo liegt mein Fehler?
Spannung ist eine Sache. Strom die andere.
Wieviel Strom rinnt durch (12+22)Ohm aus dem Ausgansgpin nach Masse?
Kann der µC das überhaupt liefern?
Wenn du die Widerstände 10mal (100mal, 1000mal) so groß machst, hast du
immer noch dasselbe Spannungsverhältnis. Aber es rinnt nur 1/10 (1/100,
1/1000)-tel soviel Strom.
Durch einen Strohhalm kannst du auch Wasser mit 2m/s durchjagen. Wird
aber trotzdem nicht reichen um ein FLusskraftwerk anzutreiben.
Also: Es gibt 2 Dinge, auf die man achten muss - Spannung und Strom.
Peter Reither schrieb:> Hier die aktualisierte Version mit Abblockkondensatoren für die ICs
Bei AVcc fehlt er immer noch
JEDES Pärchen Versorgungsspannung/Masse bekommt einen 100nF
Kondensator. Jedes! Und wenn ein IC eben mehrere derartige Anschlüsse
hat, dann kriegt es auch an jedem einen derartigen Kondensator.
Karl Heinz Buchegger schrieb:> Spannung ist eine Sache. Strom die andere.
Stimmt, daran habe ich gar nicht gedacht. Danke! Mit diesem Hinweis habe
ich die Widerstände in 1,2k und 2,2k geändert.
Welchen Sinn haben eigentlich der 595 bzw. der 165?
Du hast 3 Millionen Pins am Mega frei und benutzt einen 'Portexpander'?
Den Sinn dahinter versteh ich noch nicht. Aber vielleicht gibt es ja
einen.
Karl Heinz Buchegger schrieb:> Welchen Sinn haben eigentlich der 595 bzw. der 165?
Ich möchte die entsprechenden Pins nach außen legen, um sie später
kaskadieren zu können. Erst einmal möchte ich mich auf die Anbindung an
den Pi kümmern, und ein solides Kontrollboard dafür bauen. Und später
gibt es weitere Anwendungen, die dann die Raspberry Pi / Kontrollboard
Konstruktion steuern soll. Und um nicht später die Platine wegschmeißen
zu müssen, möchte ich das Ganze so gestalten, dass die I/O Ports
erweiterbar sind.
--
Anbei noch einmal der aktualisierte Schaltplan.
Peter Reither schrieb:> Konstruktion steuern soll. Und um nicht später die Platine wegschmeißen> zu müssen, möchte ich das Ganze so gestalten, dass die I/O Ports> erweiterbar sind.
Kennst du die Rubrik: "Berühmte letzte Worte"?
Bis du da das erste mal eine Erweiterung planst, hast du schon ein paar
von diesen Platinen gefertigt. Mach deine erste Platine einfach (auch
einfach zu programmieren) und denk erst in Version 2.0 darüber nach,
nachdem du Erfahrung gesammelt hast, wie du daraus die eierlegende
Wollmilchsau entwickeln kannst. Du musst nicht mit deiner ersten Platine
gleich die Welt der µC revolutionieren.
Du kannst dir aber mit einem zu gefinkelten Aufbau selbst das Leben
unendlich schwer machen.
Karl Heinz Buchegger schrieb:> ach deine erste Platine einfach (auch> einfach zu programmieren) und denk erst in Version 2.0 darüber nach,> nachdem du Erfahrung gesammelt hast, wie du daraus die eierlegende> Wollmilchsau entwickeln kannst.
Du hast wahrscheinlich Recht. Ein Schritt nach dem Anderen.
Das Layout habe ich entsprechend angepasst. Ist der 74HC125 eigentlich
wirklich notwendig? Ich denke schon, da der SO Pin nicht Tri-State ist,
auch wenn CS high ist, oder?
Peter Reither schrieb:> Es geht darum, einen Raspberry Pi mit einem ATmega8 zu verbinden.
Überleg dir, ob du für ein neues Projekt wirklich den längst überholten
ATmega8 einsetzen willst.
Wenn, dann würde ich den ATmega88A vorsehen (ist oft auch billiger). Das
hat zudem den Vorteil, dass der dieser weitgehend aufwärtskompatibel ist
zu den pingleichen Typen mit mehr Speicher: ATmega168A und ATmega328
(sogar das Datenblatt ist das gleiche).
Markus Weber schrieb:> Überleg dir, ob du für ein neues Projekt wirklich den längst überholten> ATmega8 einsetzen willst.
Da hast du wohl Recht. Werde ich noch einmal die Datenblätter in Ruhe
durchgehen, danke für den Hinweis!
So, mit all euren Anmerkungen habe ich das Ganze noch ein wenig
überarbeitet und vereinfacht. Als EEPROM habe ich nun auch einen IC
genommen, der bei Nichtselektierung laut Datenblatt den Ausgang
freigibt. Damit konnte noch ein IC wegfallen.
Auch den ATmega8 habe ich ersetzt.
Einen Fehler habe ich jedoch noch in der Schaltung: Die Leitungen 3-6
von LCD1 vertragen auch nur 3.3V. Was würdet ihr hier vorschlagen, um
die Spannung zu reduzieren, 4 Spannungsteiler wie bei Pin 10 des
Raspberry Headers? Kann ich das mit dem SPI Bus einfach so machen,
Spannungsteiler an Takt und MOSI hängen?
Was ist das für ein LCD und warum muss es ausgerechnet dieses sein?
Es gibt doch genug LCD im Handel, auch mit SPI Anschluss, die mit +5V
laufen.
So wie ich das sehe, ist das LCD dein einziger 3.3V Konsument. D.h.
tauscht du das LCD gegen einen 5V Typ aus, fällt dir auch der ganze
Bereich 3.3V Versorgung weg.
Karl Heinz Buchegger schrieb:> Was ist das für ein LCD und warum muss es ausgerechnet dieses sein?
Das ist ein Nokia 5100 Display, und das war sehr günstig zu bekommen.
Außerdem habe ich inzwischen meine Routinen für die Anzeige daran
angepasst. Der Controller ist ein PCD8544, und der verträgt leider nicht
mehr (laut Datenblatt).