Forum: Mikrocontroller und Digitale Elektronik Feedback zu erstem AVR Entwurf


von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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

von Andreas B. (bitverdreher)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

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

von Andreas B. (bitverdreher)


Lesenswert?

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

von Johannes M. (johnny-m)


Lesenswert?

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.

von Andreas B. (bitverdreher)


Lesenswert?

Stimmt, da habe ich Aref mit AVcc verwechselt. Nehme hiermit alles 
bezüglich Aref zurück.

Gruß
Andy

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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

von Andreas B. (bitverdreher)


Lesenswert?

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

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Andreas B. (bitverdreher)


Lesenswert?

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

von Andreas C. (acdc)


Lesenswert?

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

von Rudolph R. (rudolph)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.