Hallo, ich habe ein kleines AVR Board mit Eagle entwickelt. Es ist sehr simpel aufgebaut, enthält nur den AT90USB1287 und ein bisschen Kleinkram. Das Board soll als kleiner Adapter dienen, d.h. man kann diese µC-Platine dann auf andere Platinen stecken. Es ist mein erstes AVR-Board, daher würde ich mich über Feedback freuen, ob ich was wichtiges übersehen habe. Ich habe mich nach dem Datenblatt gerichtet, aber das ich ja über 450 Seiten lang. Es kann also ganz gut sein, dass ich was übersehen habe. Hier noch ein paar Besonderheiten des Boards: - Alle Port-Pins sind auf die beiden Steckleisten rausgeführt. - Der Clock kann durch einen Quarz (16MHz) erzeugt werden, oder extern über die Steckleiste kommen (Auswahl durch Jumper) - Die Stromversorgung kann durch USB geschehen oder von der Steckleiste kommen. USB ist über eine Diode getrennt. - Der µC kann mit 5V oder mit 3.3V betrieben werden. Ein Spannungsstabilisator ist auf der Platine. (Auswahl durch Jumper) - Das Board hat zwei Leuchtdioden: eine zeigt das Vorhandensein der Betriebsspannung des µC an, die andere kann geschaltet werden über PE3. - Es gibt einen 10 poligen Stecker, der die ISP-Signale nach Atmel-Norm führt. Zusätzlich habe ich auf den vier freien Pins (vorher GND oder NC) die JTAG-Signale rausgeführt. Ich habe die Platine recht klein gemacht (3.2x3.8cm). Da ich noch nicht viel Erfahrung habe, habe ich leider nicht mehr auf die Platine bekommen. So wird der AREF-Eingang nicht auf die Steckleiste geführt und das Board hat keinen Reset-Taster (den müsste man also extern machen, da Reset auch auf der Steckleiste liegt). Genug Erklärung, denke ich ;-) Ich freue mich über ein Feedback. Michael
Spontan fällt mir auf: Aref würde ich nicht frei schweben lassen. Im Zweifelsfall auf Vcc. Und was soll der LT1117 eigentlich regeln ? Ohne Blick in das Datenblatt behaupte ich mal: Vcc des AVR darf nicht niedriger sein als die Spannung irgendwelcher Eingänge ! Gruß Andy
Hi Andy, danke fürs Feedback. Bezüglich Aref: Wenn ich die Schematic 25-1 auf Seite 314 richtig verstehe, dann kann man auf den Aref per Register AVCC oder eine interne Referenz schalten. Wenn man Aref extern auch beschaltet, kann man die interne Referenz nicht mehr nutzen, da das dann ein direkter Kurzschluss wäre. Der Text unter der Abb sagt folgendes: "Optionally, AVCC or an internal 2.56V reference voltage may be con- nected to the AREF pin by writing to the REFSn bits in the ADMUX Register. The internal voltage reference may thus be decoupled by an external capacitor at the AREF pin to improve noise immunity." Was den Spannungsregulator angeht, tja, irgendwie hast Du da schon recht. Ich habe den automatisch mit draufgesetzt, aber eigentlich könnte man den auch weglassen, und die Spannungsversorgung durch die Hauptplatine machen lassen (über die Steckleisten). Vielleicht hätte ich dann genug Platz für einen Reset-Taster. Muss ich mal ausprobieren... Sonst noch was aufgefallen? Oder habe ich alles wichtige drauf? Danke und schöne Grüsse Michael
Hi Michael, Aref kann man ja über einen Widerstand 10k an Vcc legen und auch nach außen führen. Dann bist Du in der Verwendung des ADC flexibler. JTAG/ISP würde ich nicht als eine gemeinsame Steckerleiste ausführen. Du verlierst sonst die Option, handelsübliche Programmer zu verwenden. ISP gibt es auch als 6-pol Anschluss. Was die Auswahl 3,3/5V betrifft. Du musst Dich entscheiden, ob Du Deine Schaltung mit 3,3 oder 5V betreiben willst. Bei 3,3 V mußt Du sonst auch die Ein/Ausgänge zu USB anpassen. Wenn Du keine großen Stromverbraucher hast, kannst Du die Platine gut über den USB speisen. Falls Du aber eine Auswahl Speisung inter/extern über Jumper machen möchtest, dann hast Du das Problem, daß Dir das bei falscher Jumperbelegung der USB Port killt (wenn nämlich die externe 5V an den USB Port gerät -> Ausgleichsströme.) Wenn Du das vorhast, dann Vcc nur über Schottky Dioden (bei 4,7V hast Du normalerweise noch keine Probleme) einspeisen oder besser einen Umschalter vorsehen. Den Resetschalter kannst Du bei Platzmangel auf einen ISP Stecker löten und bei Bedarf auf die Schaltung stecken. Während des Programmierens bzw. wenn das ISP Kabel noch steckt, mache ich den Reset über den Aufruf: avrdude -p atmega32 -P /dev/ttyS0 -b 115200 -c avr910 (entsprechend anpassen natürlich ;-) Gruß Andy
Andreas B. wrote:
> Aref würde ich nicht frei schweben lassen. Im Zweifelsfall auf Vcc.
Leute, das mit AREF ist so völlig in Ordnung! AREF wird nie extern mit
(A)VCC verbunden! AVCC ist intern als Referenz einstellbar. Ein
100nF-Kondensator gegen GND sollte im Regelfall die einzige Beschaltung
sein, es sei denn, es soll irgendwann einmal eine externe Referenz
benutzt werden, die der µC nichtr intern zur Verfügung stellen kann. Die
muss dann an AREF eingespeist werden.
Stimmt, da habe ich Aref mit AVcc verwechselt. Nehme hiermit alles bezüglich Aref zurück. Gruß Andy
Also erstmal vielen Dank für die Anregungen. Ich habe jetzt den Spannungsstabilisator entfernt. Habe dadurch sofort auch Riesenplatz auf der Platinenoberseite gewonnen :-) Die Spannungsversorgung stelle ich mir jetzt so vor: 1.) Entweder über USB. Dort habe ich übrigens eine Schottky-Diode vorgesehen, nur so als Sicherheit. Der AVR würde dann 4.7V bekommen und müsste damit bis 16MHz laufen können. 2.) Oder (wählbar über Jumper) extern von der Steckleiste. Dort könnte man dann z.B 3.3V oder 5V anlegen (natürlich auch jede andere Spannung). Probleme macht mir noch ein wenig UVCC. Dies ist der AVR interne Spannungsstabilisator, der die Spannung von 3.3V für die USB-Pads generiert. Den soll man wie folgt verschalten: - Bei VCC > 3.4V direkt an VCC. Er macht dann die 3.3V. - Bei VCC < 3.4V nicht anschliessen. Stattdessen VCC an UCAP (damit wird der Spannungsstabilisator umgangen). Dazu müsste ich noch einige Jumper aufs Board machen und den Platz habe ich dann doch nicht mehr. Ich habe UVCC jetzt direkt an VBUS gelegt. Damit kriegt UVCC nur Spannung, wenn USB angeschlossen ist, dafür aber immer 5V. Ob das so funktioniert? Reset über einen ISP-Stecker finde ich gut. Ich hätte zwar noch Platz für einen Reset-Taster auf dem Board, aber die Leitung bis zu zum Reset-Pin zu bekommen, wäre noch ein grösserer Änderungsaufwand. Über meinen kombinierten ISP/JTAG-Stecker bin ich auch am rätseln. Die Programmer, die ich hier habe, haben die nicht-benutzten Leitungen hochohmig, aber ich weiss nicht, was die "offiziellen" Programmer (z.B. avrisp mkII) machen. Die einzige JTAG-Output Leitung (TDO) liegt auf einen NC, die anderen Leitungen sind alle Input und sind Flankengesteuert. Ein anliegender GND-Pegel dürfte also eigentlich nicht stören, oder? Platz für einen weiteren Stecker hätte ich nicht unbedingt auf dem Board. Muss da noch einmal drüber nachdenken. Fände die Option, ggf. auch JTAG nutzen zu können, wenn auch über einen "Spezialstecker", nicht so schlecht. Danke auch für die Klarstellung mit Aref. Gut zu wissen, dass es jetzt so o.k. ist. Macht es Sinn auch das Board hier zu posten? Ich habe es eigentlich fertig, abgesehen von den beiden obigen Punkten. Grüsse Michael
Was den ISP Stecker betrifft: Du mußt damit rechnen, daß unbelegte Anschlüsse auf GND liegen. Das könntest Du aber mit einem Zwischenstecker vermeiden, der nur die benötigten Anschlüsse durchschleift. Wie klein muß das Teil denn sein, daß es für ein paar Jumper nicht mehr reicht ? Du kannst ja mal das Board posten. Vielleicht finden sich da noch ein paar qmm. Gruß Andy
Hi Andy Das mit dem Zwischenstecker ist gut. Damit würde es dann auf jeden Fall gehen. Bezüglich der Grösse: Tja, ich versuche das Board so klein wie irgend möglich zu machen. Da ich den Spannungsstabilisator jetzt runter genommen habe, ist auf dem Top-Layer wieder einiges an Platz :-) Aber der Bottom-Layer ist ziemlich voll. Ich hatte schon grosse Mühe, die beiden anderen Jumper für die Versorgungsspannung und dem Oszillator unterzukriegen. Aber ich habe auch noch nicht so viel Ahnung. Ist mein zweites Board, das ich entwickle. Bin also noch Anfänger. Natürlich könnte ich das ganze Board noch mal etwas vergrössern. Aber ich bin noch ziemlich langsam mit Eagle und das würde bei mir wohl ein paar Stunden dauern. Anbei mal das Board mit beiden Layern.
Hier nur die Top-Sicht. Der Spannungsstabilisator hatte vorher den ganzen freien Platz eingenommen. Jetzt habe ich das "Vogelfutter" etwas mehr verteilt. Dadurch sind die beiden USB-Datenleitung auf dem Bottom-Layer jetzt oben von einer durchgehenden Massefläche überdeckt, was anscheinend positiv für die USB-Kommunikation ist.
Und hier die Bottom-Sicht. Ich habe übrigens noch was Interessantes im Datasheet gefunden. Der AVR hat ein Register, mit dem man den internen 3.3V Regulator auch ausschalten kann. Dann sind die USB-Pads ebenfalls ohne Strom. Das könnte daraufhin deuten, dass es kein Problem sein könnte, den Teil ohne Strom zu lassen. Wenn dann ein Kabel angesteckt wird, wird ein Interrupt erzeugt, und in dem würde man dann den Regulator einschalten. Wenn das Kabel abgezogen wird, kann man den Regulator wieder abschalten. Ist zwar jetzt keine Sicherheit, könnte aber wirklich gehen. Die interne 3.3V Spannung wird übrigens wirklich nur für die beiden Datenleitungen benutzt. Die USB-Logik selber läuft mit AVCC.
Ist ja wirklich mini ;-) Wenn ich mir das so überlege, solltest Du Reset vielleicht doch auf die Steckerleiste führen (Sehe gerade, das hast Du schon). Den Ganzen ISP/JTAG Kram würde ich vielleicht nur die Steckerleisten legen und den Programmierstecker weglassen, das spart noch etwas Platz. Bei Bedarf kannst Du in der Zielschaltung programmieren. Standalone läßt sich das dann mit einem Adapter bewerkstelligen. Aber sonst sieht es schon mal gut aus. Gruß Andy
Hallo Michael ! Ich finde diese Adapterplatine schon klasse, habe da mal zwei Fragen zu : 1) Wie sprichst Du den Controller über USB an ? 2) Kann man die Platine von Dir bekommen ? ;-) Gruß, Andreas
Mal was mechanisches, läuft das Board durch den DRC? Die Abstände scheinen sehr klein zu sein. Deine VIA's finde ich dagegen sehr gross. Ich mache normalerweise 12 mil (0,3mm) VIA's mit 6 mil Restring und stelle die Abstände auf 8 mil. Das hängt aber auch davon ab, was der Platinen-Hersteller kann.
Die Grösse wird vor allem durch die µC und der beiden Steckleisten limitiert (zusätzlich noch ein wenig über den Leiterbahnabstand). Dadurch geht's wohl nicht mehr viel kleiner. Natürlich geht das Board durch den DRC. Ich checke dies nach jeder gelegten Leitung. Die DRC-Restriktionen sind von Olimex (10mil, Vias 26mil). Damit ist eine Herstellung bei günstigen Platinenbauern möglich. Mein Ziel ist eigentlich, auf eine möglichst kleine Platine alle dauernd benötigten Teile für einen µC zu setzen, so dass man sich bei seiner eigentlichen Platinenentwicklung nicht mehr darum kümmern muss. D.h. auf die Platine muss der µC selbst, eine Clock-Source und eine PC-Kommunikationsschnittstelle, letztere sowohl zum Datenaustausch als auch zur Programmierung des µC. Der AT90USB646/647/1286/1287 ist, denke ich, ein recht leistungsfähiger 8Bit Mikrocontroller, hat den USB integriert, und auch ne ganze Menge Ports. Ich denke, dass er für viele typische Anwendungen gut geeignet ist. Ich habe auch noch ein paar 8051 basierte FX2 Chips hier. Ich mache vermutlich noch so ein Board mit denen. Wird aber wohl etwas grösser, da der noch mehr Ports hat und dementsprechend längere Steckleisten braucht. Danke noch mal für die vielen Tips und Ideen. Ich habe jetzt das Gefühl, dass die Platine so wohl laufen wird. Werde sie in den nächsten Wochen mal zur Produktion geben. @acdc: USB ist zunächst nur ein Kommunikationsweg. Genau wie bei RS232 brauchst Du Programme auf beiden Seiten. USB auf diesem Board wird zwei Funktionen erfüllen: 1.) Programmierschnittstelle: Der integrierte Bootloader erlaubt eine einfache Programmierung, z.B. mit dem freien Atmel-Tool Flip. D.h., wenn Du den Mikrokontroller programmieren willst, steckste einfach ein USB-Kabel ein und startest das entprechende Programm auf dem PC. Dazu ist keine vorhergehende Programmierung des Boards nötig. Du brauchst also nicht einmal einen Hardware-Programmierer, nur ein USB-Kabel :-) 2.) Kommunikationschnittstelle: Je nachdem, was Du auf den Mikrokontroller für ein Programm lädst, kommunizierst Du mit einen entsprechenden Programm auf dem PC. Der Mikrokontroller kann alle typischen USB-Geräte emulieren. Typisch wäre z.B. eine virtuelle RS232-Schnittstelle. Oder ein HID-Gerät, z.B. eine Maus. Es gibt da im Netz USB-Bibliotheken, mit denen man die wichtigsten USB-Geräte emulieren kann. Was Du daraus machst, liegt nur an Dir, was Du brauchst und was Sinn macht. Vielleicht willst Du nur ein paar Bytes austauschen, vielleicht brauchst Du mehrere 100kByte pro sec. USB kann so fast alles :-) Bezüglich Platinenherstellung: Ich werde in etwa eine Woche die Bestellung machen. Dort lasse ich sicherlich mal 5-10 Platinen fertigen. D.h. das ich in etwa 2-3 Wochen die Platinen haben werde. Dann würde ich die natürlich erstmal durchchecken, ob das alles so läuft, wie ich mir das denke. Wenn ja, kann ich Dir gerne eine Platine (leer oder auch bestückt) verkaufen. Viele Grüsse Michael P.S.: Während ich das hier schrieb, habe ich dreimal neue Sachen reingeschrieben, um auch Antworten auf die neuen Posts zu geben. Ich hoffe, das ist noch gut lesbar ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.