Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

project:tinymega [2013/01/08 21:10]
79.233.251.38 [Dokumentation]
project:tinymega [2014/10/03 00:00] (aktuell)
89.13.168.70 [Dokumentation]
Zeile 19: Zeile 19:
   * Alle Signale des uC und Power bequem auf zwei Pinreihen im 2,​54mm-Raster -- ideal für Breadboards   * Alle Signale des uC und Power bequem auf zwei Pinreihen im 2,​54mm-Raster -- ideal für Breadboards
   * Stromversorgung per USB oder extern (5V stabilisiert)   * Stromversorgung per USB oder extern (5V stabilisiert)
 +    * (nur v2) Optionaler Spannungsregler von 5V aus USB auf beliebige andere Spannung, z.B. 3,3V
 +    * (nur v2) Eingebaute Sicherung, um auch die USB-Ports billiger Notebooks vor Zerstörung zu schützen ;)
 +  * (nur v2) Großer Massekontakt für bequemen Masseabgriff mit Tastköpfen u.ä.
  
 ====== Aufbau ====== ====== Aufbau ======
Zeile 81: Zeile 84:
  
 hier: [[https://​github.com/​dop3j0e/​eagle/​blob/​master/​Atmega32U4-Breakout/​v3/​instructions.pdf?​raw=true]] hier: [[https://​github.com/​dop3j0e/​eagle/​blob/​master/​Atmega32U4-Breakout/​v3/​instructions.pdf?​raw=true]]
 +
  
 ====== Dokumentation ====== ====== Dokumentation ======
  
 [[http://​www.atmel.com/​Images/​doc7766.pdf|ATmega32U4 Datenblatt]] [[http://​www.atmel.com/​Images/​doc7766.pdf|ATmega32U4 Datenblatt]]
 +
 +===== Spannungsversorgung ======
 +
 +Der TinyMega v1 ist auf 5V aus dem USB festgelegt. Betrieb mit eigener Spannungsversorgung unabhängig vom USB ist natürlich möglich, aber gefährlich,​ wenn der TinyMega ausserdem an den USB angeschlossen werden soll, denn es besteht keinerlei Trennung zwischen VUSB und VDD.
 +
 +Beim TinyMega v2 ist Platz für einen Spannungsregler vorgesehen, mit dem die USB-Versorgungsspannung von 5V auf jede beliebige kleinere Spannung geregelt werden kann, z.b. wenn man einen Haufen 3,3V-Logik steuern will und keine Lust auf Pegelwandler überall hat. Die gesampte Platine und auch ihr VDD-Pin hängen am Ausgang des Spannungswandlers. Beim 3,​3V-Betrieb muss darauf geachtet werden, dass der ATmega dann nur bis 8MHz verträgt, also den Taktteiler besser nicht auf 1 setzen ;)
 +
 +Wird die normale USB-Versorgungsspannung von 5V benötigt, kann der Spannungsregler weggelassen werden und die Lötbrücke "​VDD=VUSB"​ muss geschlossen werden. Das geht auch bei eingebautem Spannungsregler;​ der verträgt es ohne Probleme, überbrückt zu werden.
 +
 +Ausserdem sind durch diese Bauweise VUSB und VDD nicht mehr fest verbunden, es kann also ein USB-Gerät gebaut werden, das zwar mit dem USB redet, aber die Versorgungsspannung (fast) nicht nutzt. Dazu muss die Lötbrücke "​VDD=VUSB"​ offen gelassen werden und der Spannungsregler darf nicht eingebaut sein (oder man lötet seinen linken oberen Pin ab und biegt ihn hoch).
  
 ===== Inbetriebnahme ===== ===== Inbetriebnahme =====
Zeile 108: Zeile 122:
 Der RESET-Taster ist wohl selbsterklärend ;) Der RESET-Taster ist wohl selbsterklärend ;)
  
-Der BOOT-Taster zwingt den Atmega in den USB-Bootloader:​ Wird der BOOT-Taster gehalten, während RESET betätigt wird, started ​der Controller in den Bootloader statt in die Anwendung. Der Taster hängt zusammen mit einem Pullup-Widerstand an Pin E2 des Controllers (!HWB im Datenblatt). Falls der Pin als GPIO benutzt werden soll und der Pullup stört, kann die Lötbrücke BOOT_EN aufgelötet werden, um Taster und Pullup abzuklemmen.+Der BOOT-Taster zwingt den Atmega in den USB-Bootloader:​ Wird der BOOT-Taster gehalten, während RESET betätigt wird, startet ​der Controller in den Bootloader statt in die Anwendung. Der Taster hängt zusammen mit einem Pullup-Widerstand an Pin E2 des Controllers (!HWB im Datenblatt). Falls der Pin als GPIO benutzt werden soll und der Pullup stört, kann die Lötbrücke BOOT_EN aufgelötet werden, um Taster und Pullup abzuklemmen. Beim TinyMega v2 ist die Lötbrücke mit "​E2=BOOT"​ beschriftet.
  
 Im laufenden Betrieb kann Pin E2 ganz normal als Input konfiguriert werden (ohne Pullup, ist ja schon einer da), so dass der BOOT-Taster als General-Purpose-Taster dienen kann. Im laufenden Betrieb kann Pin E2 ganz normal als Input konfiguriert werden (ohne Pullup, ist ja schon einer da), so dass der BOOT-Taster als General-Purpose-Taster dienen kann.
Zeile 118: Zeile 132:
 Die grüne LED ist die Power-LED und ist immer an, wenn das Board mit 5V versorgt wird. Die grüne LED ist die Power-LED und ist immer an, wenn das Board mit 5V versorgt wird.
  
-Die rote LED ist über eine Lötbrücke an Pin E6 angeschlossen und kann darüber gesteuert werden. Wenn die LED-Last an E6 nicht erwünscht ist, einfach die Lötbrücke öffnen (heissmachen,​ Entlötsaugpumpe,​ fertig).+Die rote (v1) bzw. blaue (v2) LED ist über eine Lötbrücke an Pin E6 angeschlossen und kann darüber gesteuert werden. Wenn die LED-Last an E6 nicht erwünscht ist, einfach die Lötbrücke öffnen (heissmachen,​ Entlötsaugpumpe,​ fertig). Beim TinyMega v2 ist die Lötbrücke auf der Unterseite und mit "​E6=LED"​ beschriftet.
 ====== Software ====== ====== Software ======
  
Zeile 148: Zeile 162:
   * AVR Studio 5 wurde dahingehend erweitert, dass es das nicht mehr beherrscht *grml*.   * AVR Studio 5 wurde dahingehend erweitert, dass es das nicht mehr beherrscht *grml*.
  
 +===== Windows: AVR Studio 5,6  =====
 +
 + Man kann sich AVR_studio so einrichten, dass man Flip nicht manuell bedienen muss
 +
 + 1. Befehl Anlegen
 +    Extras => Externe Tools => Hinzufügen
 +    Titel: Flip
 +    Befehl: C:\Program Files (x86)\Atmel\Flip 3.4.5\bin\batchisp.exe ​  (pfad zu batchisp.exe , die im Flip ordner ist)
 +    Argumente: -device atmega32u4 -hardware usb -operation ERASE F LOADBUFFER "​$(TargetDir)$(TargetName).hex"​ PROGRAM VERIFY START noreset 0
 +    =>​übernehmen
 +    ​
 + 2. Hotkey/in die Menüleiste
 +    Extras => Anpassen => Neu ->"​Flip"​
 +    dann reiter "​Befehle"​ => Symbolleiten => Flip 
 +    Befehl Hinzufügen => Extras => Externer Befehl 1 
 +    ​
 +    Für hotkey: ​
 +    Im selben Menü: Tastatur->​ Pop-up => in "​Befehl mit folgendem inhalt anzeigen"​ nach "​Extras.ExternerBefehl1"​ suchen
 +    Gewünschte Tastenkobi zuweisen (F5 empfielt sich da sich der deugger mit dem tiny mega eh nicht nutzen lässt)
 ===== Linux: avr-gcc ===== ===== Linux: avr-gcc =====
  
Zeile 157: Zeile 190:
 ===== Hello World für den TinyMega ===== ===== Hello World für den TinyMega =====
  
-Es werden die Programme avr-gcc und dfu-programmer benötigt.+Es werden die Programme ​''​avr-gcc'' ​und ''​dfu-programmer''​ und die Bibliothek ''​avr-libc'' ​benötigt.
  
 Der folgenden Quelletext muss als helloworld.c gespeichert werden: Der folgenden Quelletext muss als helloworld.c gespeichert werden:
Zeile 170: Zeile 203:
     cli(); // clear interrupts     cli(); // clear interrupts
     clock_prescale_set(clock_div_1);​     clock_prescale_set(clock_div_1);​
 +    MCUCR = (1 << JTD);​ //​jtag ausschalten
 +    MCUCR = (1 << JTD);​ //​this need to be executed twice 
     sei(); // set interrupts     sei(); // set interrupts
  
Zeile 194: Zeile 229:
   - TinyMega mit dem PC verbinden   - TinyMega mit dem PC verbinden
   - Taste BOOT drücken (und gedrückt halten)   - Taste BOOT drücken (und gedrückt halten)
-  - Taste RESET drücken (und wider loslassen)+  - Taste RESET drücken (und wieder ​loslassen)
   - Taste BOOT loslassen   - Taste BOOT loslassen
  
Zeile 203: Zeile 238:
  
 Jetzt sollte die rote LED auf dem Entwicklungsboard blinken. Jetzt sollte die rote LED auf dem Entwicklungsboard blinken.
- 
 ==== Makefile ==== ==== Makefile ====
 Für die obige Toolchain gibt es auch ein einfaches Makefile: Für die obige Toolchain gibt es auch ein einfaches Makefile:
Zeile 228: Zeile 262:
  sudo $(AVR_PROGRAMMER) $(AVR_CHIP) start ; true</​file>​  sudo $(AVR_PROGRAMMER) $(AVR_CHIP) start ; true</​file>​
  
 +====Testprogramm für die I/​O-Pins====
 +
 +Das folgende Testprogramm lässt die LED per Interrupt blinken und schaltet alle weiteren Pins auf HIGH. Um die Pins zu testen, kann eine beliebige LED mit Vorwiderstand (180 Ohm) mit der Kathode an den GND-Pin des TinyMega angeschlossen und mit der Anode an alle anderen Pins gehalten werden. Die LED sollte bei allen Pins aufleuchten,​ ausser bei E6 (wo sie natürlich blinkt ,), bei E2 (das haben wir schon durch den Bootloader-Taster getestet), bei VREF (das kann so nicht getestet werden) und bei RST (das wird aber einen Reset auslösen, weil die LED durch den Vorwiderstand den Reset-Pin auf Ground zieht).
 +
 +<​file>#​include <​avr/​io.h>​
 +#include <​avr/​power.h>​
 +#include <​avr/​interrupt.h>​
 +
 +#define LEDDDR DDRE
 +#define LEDPORT PORTE
 +#define LEDBIT (1 << PE6)
 +
 +ISR(TIMER1_COMPA_vect)
 +{
 + LEDPORT ^= LEDBIT;
 +}
 +
 +int main(void)
 +{
 + clock_prescale_set(clock_div_1); ​                       // systemtakt teiler
 +        MCUCR = (1 << JTD);​ //​jtag ausschalten
 + MCUCR = (1 << JTD);​ //​this need to be executed twice 
 +        ​
 +        ​
 + /* Timer/​Counter 1 für Interrupts aufsetzen */
 + TCCR1A = 0;
 + TCCR1B = 5 << CS10 | 1 << WGM12;
 + OCR1A = 8192;
 + TIMSK1 = 1 << OCIE1A;
 + TIFR1 = 1 << OCF1A;
 +
 + MCUCR = 1 << JTD;  /* JTAG abschalten, sonst funktionieren */
 + MCUCR = 1 << JTD;  /* einige Pins von PORTF nicht wie erwartet */
 + DDRB = DDRC = DDRD = DDRF = 0xFF;
 + PORTB = PORTC = PORTD = PORTF = 0xFF;
 + LEDDDR = LEDBIT;
 +
 + sei();
 +
 + while (1);
 +}</​file>​
 +====Funktion für Sprung in den Bootloader====
 +<​file>​
 +void bootloader (void)
 +{
 + MCUCR |=  (1 << IVCE); ​ //​IVCE ​ = 1 //​register für restet
 + MCUCR |=  (1 << IVSEL); //IVSEL = 1 //​register für restet
 + TIMSK0 = 0;             //​Timer-Interrupt ausschalten
 +        // hier sollten die anderen aktiven timer ausgeschaltet werden (TIMSK1,​TIMSK2,​TIMSK3,​...)
 + _delay_ms(50);​
 + asm volatile ("jmp 0x3800"​);​ //springe an die richtige stelle
 +}
 +</​file>​
 ====Linksammlung==== ====Linksammlung====
   * [[http://​www.radiolocman.com/​shem/​schematics.html?​di=112213|Atmega32U4 RAW HID Device]]   * [[http://​www.radiolocman.com/​shem/​schematics.html?​di=112213|Atmega32U4 RAW HID Device]]
   * [[http://​fourwalledcubicle.com/​LUFA.php|Lufa USB-Libary]]   * [[http://​fourwalledcubicle.com/​LUFA.php|Lufa USB-Libary]]
project/tinymega.1357675824.txt.gz · Zuletzt geändert: 2013/01/08 21:10 von 79.233.251.38