Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
projects:workshop1 [2011/12/12 15:43] 92.74.122.167 angelegt |
projects:workshop1 [2014/01/04 23:19] (aktuell) wanda [Code aus dem Wörkshop] |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== mC wökrshop ====== | ====== mC wökrshop ====== | ||
+ | ---- datatemplateentry project ---- | ||
+ | template : :sys:tpl:project | ||
+ | description : Wökrshop zur mC prgrammierung | ||
+ | coordinators : [[:users:skruppy:]] | ||
+ | confidants : [[:users:wanda:]], [[:users:sushi:]], Fred | ||
+ | state_tags : held, to be continued | ||
+ | type_tags : software, elektro, C, event, workshop | ||
+ | ---- | ||
+ | |||
Wer macht mit | Wer macht mit | ||
* sushi | * sushi | ||
* loon (Hat wer nen Leihduino???) | * loon (Hat wer nen Leihduino???) | ||
* Skruppy (Hat wer nen Leihduino???) | * Skruppy (Hat wer nen Leihduino???) | ||
- | * wanda (...hat nen Boarduino + ein eHaserl, leider keinen Verleihduino) | + | * wanda (...Boarduino + ein eHaserl...bringe beides mit) |
* fred | * fred | ||
Zeile 23: | Zeile 32: | ||
===== Materialien ===== | ===== Materialien ===== | ||
Das hier kann während des wörkshops mit Spickzetteln, Code sippets, Links, ... gefüllt werden. | Das hier kann während des wörkshops mit Spickzetteln, Code sippets, Links, ... gefüllt werden. | ||
+ | ==== Hilfe ==== | ||
+ | * http://www.nongnu.org/avr-libc/user-manual/modules.html | ||
+ | * http://www.heise.de/ct/artikel/Shake-rattle-n-roll-292164.html | ||
+ | * http://www.ladyada.net/learn/arduino/ | ||
+ | ==== Löten iss sooo einfach ==== | ||
+ | "Löten ist einfach! und so wirds gemacht" (Comic): {{:elektro:fullsoldercomic_de.pdf|}} | ||
+ | ==== Boarduino ==== | ||
+ | **Infos**: http://ladyada.net/make/boarduino/ \\ | ||
+ | **Plan als .png**: http://ladyada.net/images/boarduino/boarduinosch.png\\ | ||
+ | \\ | ||
+ | **Chipinfos**: \\ | ||
+ | unter: http://www.atmel.com/dyn/resources/prod_documents/doc8271.pdf\\ | ||
+ | * ATmega328P/ 16.00 MHz | ||
+ | * Flash (Kbytes): 32 | ||
+ | * Pin Count: 32 | ||
+ | * Max. Operating Frequency: 20 | ||
+ | * CPU: 8-bit AVR | ||
+ | |||
+ | ==== ehaserl ==== | ||
+ | [[projects:ehaserl]] | ||
+ | |||
+ | ==== AVR-Videos ==== | ||
+ | |||
+ | evtl. hilfreich (noch nicht geguckt - also testen :-) ) | ||
+ | * 25C3: Music with Microcontrollers: http://events.ccc.de/congress/2008/Fahrplan/events/2843.en.html | ||
+ | * 26C3: Advanced Microcontroller Programming: http://events.ccc.de/congress/2009/Fahrplan/events/3672.en.html | ||
+ | |||
+ | |||
+ | |||
+ | ===== AVR ===== | ||
+ | sudo apt-get install gcc-avr avrdude avr-libc binutils-avr | ||
+ | |||
+ | * **avrdude** \\ Schreibt ("flasht") die Firmware in den Flash speicher des mC. Für arduinos ist die flash methode "arduino" | ||
+ | * **avr-libc** \\ Wer nicht auf hard core assembler steht, hat damt ein Grundgerüst um z.B. auf Ports per Namen zu zu greifen!!!11elf ([[http://www.nongnu.org/avr-libc/user-manual/modules.html|Doku]]) | ||
+ | * **gcc-avr** \\ Der compiler (dieser macht keine lecker sandwiches) | ||
+ | * **binutils-avr** \\ Tools um infos über die compilate etc. zu bekommen und zu konvertieren und lauter so klein kram. | ||
+ | Das sind alle Pakete, die Fisch braucht. | ||
+ | ===== Makefile für: ATmega1280 ===== | ||
+ | Makefile kopier quellen | ||
+ | * https://github.com/Skrupellos/Capacitive-touch-sensor/blob/master/Makefile [sic!] | ||
+ | * http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Exkurs_Makefiles | ||
+ | * http://www.mikrocontroller.net/articles/Beispiel_Makefile | ||
+ | \\ | ||
+ | \\ | ||
+ | Vorsicht: \\ | ||
+ | Für den **ATmega328P (Boarduino)** MCU wie follgt ändern: | ||
+ | MCU = atmega32 | ||
+ | |||
+ | avrdude muss so konfuguriert werden, dass er für arduinos "-b 57600 -p atmega32 -c arduino" bzw. "-b 57600 -p <MCU> -c arduino" als aufrufparameter bekommt. Dazu einfach mal nach AVRDUDE_* oder ähnlichem in den Makefiles suchen ... Makefiles sind einaml zu recht gefrikelt und dann immer wieder kopiert gut zu gebrauchen xD. | ||
+ | ===== Code aus dem Wörkshop ===== | ||
+ | <code c> | ||
+ | #include <avr/io.h> // this contains all the IO port definitions | ||
+ | #include <avr/interrupt.h> // definitions for interrupts | ||
+ | #include <avr/sleep.h> // definitions for power-down modes | ||
+ | #include <stdio.h> | ||
+ | #include <stdbool.h> | ||
+ | #include <util/delay.h> | ||
+ | | ||
+ | | ||
+ | int main() { | ||
+ | // 1111 1111 | ||
+ | DDRA = 255; // Data direction register (1 = output / 0 = input) | ||
+ | DDRA = 0b11111111; | ||
+ | DDRA = 0xFF; // alles output | ||
+ | DDRA = _BV(PA0) | _BV(PA1) | _BV(PA2) | _BV(PA3) | _BV(PA4) | _BV(PA5) | _BV(PA6) | _BV(PA7); | ||
+ | | ||
+ | DDRH = 0b00000000; // alles input | ||
+ | PORTH = 0b00000100; // Pull-up an | ||
+ | | ||
+ | while(true) { | ||
+ | // 0000 0000 | ||
+ | /* | ||
+ | PORTA = 0b00000001; // Erstes led an // Pegel definieren (1 = high / 0 low) | ||
+ | //PORTA = _BV(PA6) | _BV(PA4); // Pegel definieren (1 = high / 0 low) | ||
+ | _delay_ms(1000); | ||
+ | PORTA = PORTA | 0b00000010; // zweites led an | ||
+ | _delay_ms(1000); | ||
+ | PORTA = PORTA & ~0b00000001; // erstes LED aus | ||
+ | _delay_ms(1000); | ||
+ | PORTA = PORTA & 0b11111101; // zweites LED aus | ||
+ | _delay_ms(1000); | ||
+ | */ | ||
+ | |||
+ | if(PINH & 0b00000100){ | ||
+ | PORTA = PORTA & ~0b00000001; | ||
+ | }else{ | ||
+ | PORTA = PORTA | 0b00000001; | ||
+ | } | ||
+ | } | ||
+ | // 0000 0001 = 1 = 1 << 0 = _BV(0) = _BV(PA0) | ||
+ | // 0000 0100 = 4 = 1 << 2 = _BV(2) = _BV(PA2) | ||
+ | // ========================================== | ||
+ | // 0000 0101 = 1 | 4 = 5 | ||
+ | | ||
+ | | ||
+ | // BINÄÄÄRES ORDER | ||
+ | // 0001 0101 = 21 | ||
+ | // 1000 0110 = 134 | ||
+ | // =============== | ||
+ | // 1001 0111 = 155 | ||
+ | | ||
+ | // | ||
+ | } | ||
+ | </code> |