www.mikrocontroller.net

Forum: Mikrocontroller und Elektronik Feedback zu erstem AVR Entwurf

Autor: Michael (Gast)
Datum: 17.05.2008 10:21
Dateianhang: AT90USB_Board.png (26,5 KB, 254 Downloads)
preview image for AT90USB_Board.png

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
Autor: Andreas B. (bitverdreher)
Datum: 17.05.2008 12:18

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
Autor: Michael (Gast)
Datum: 17.05.2008 13:20

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
Autor: Andreas B. (bitverdreher)
Datum: 17.05.2008 14:08

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
Autor: Johannes M. (johnny-m)
Datum: 17.05.2008 14:11

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.
Autor: Andreas B. (bitverdreher)
Datum: 17.05.2008 15:05

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

Gruß
Andy
Autor: Michael (Gast)
Datum: 17.05.2008 16:12
Dateianhang: AT90USB_Board.png (26,1 KB, 38 Downloads)
preview image for AT90USB_Board.png

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
Autor: Andreas B. (bitverdreher)
Datum: 17.05.2008 18:47

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
Autor: Michael (Gast)
Datum: 17.05.2008 19:17
Dateianhang: AT90USB_Board_Top_Bottom.png (21,1 KB, 45 Downloads)
preview image for AT90USB_Board_Top_Bottom.png

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.
Autor: Michael (Gast)
Datum: 17.05.2008 19:19
Dateianhang: AT90USB_Board_Top.png (12,4 KB, 35 Downloads)
preview image for AT90USB_Board_Top.png

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.
Autor: Michael (Gast)
Datum: 17.05.2008 19:23
Dateianhang: AT90USB_Board_Bottom.png (10,6 KB, 41 Downloads)
preview image for AT90USB_Board_Bottom.png

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.
Autor: Andreas B. (bitverdreher)
Datum: 18.05.2008 11:22

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
Autor: Andreas Croonenbroeck (acdc)
Datum: 18.05.2008 11:48

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
Autor: Rudolph R. (rudolph)
Datum: 18.05.2008 12:32

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.
Autor: Michael (Gast)
Datum: 18.05.2008 12:45

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 ;-)

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net