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/08/24 04:53] (aktuell)
93.231.167.144 avr-libc dependency hinzugefügt
Zeile 148: Zeile 148:
   * 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 176:
 ===== 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 189:
     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 215:
   - 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 224:
  
 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 248:
  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