Dies ist eine alte Version des Dokuments!


mC wökrshop

Wer macht mit

  • sushi
  • loon (Hat wer nen Leihduino???)
  • Skruppy (Hat wer nen Leihduino???)
  • wanda (…Boarduino + ein eHaserl…bringe beides mit)
  • fred

Themen

  • Tool chain
  • I/O
  • Timer
  • Interrups
  • HowTo RTFM

Vorbereitung

  • Alles was AVR (8-Bit ATEML Microcontroller) mäsiges, wass schnell programmierbar ist (kein Bit-Banging oder so). Also E-Haserl, FooDoinos, Development boards, …
  • Datenblatt von ATMEL über euren Chip herunterladen. Es sind i.d.R. PDFs mit mehr als 500 Seiten.
  • Schaltpläne Pinouts suchen und mitnehmen, wenn nicht schon sauber aufgedruckt (ihr müsst halt wissen „Pin Nummer x geht auf diesen Kontakt“).
  • Programmierkabel falls nötig.
  • Breadboard, LED, Schalter, Jumper wires oder so, sinvoll für I/O.

Materialien

Das hier kann während des wörkshops mit Spickzetteln, Code sippets, Links, … gefüllt werden.

Hilfe

Löten iss sooo einfach

„Löten ist einfach! und so wirds gemacht“ (Comic): 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

AVR

apt get install

  • avrdude
  • avr-libc
  • gcc-avr
  • binutils-avr (dasda eher nicht…was auch immer das ist ;-) )

Das müssten alle Pakete sein, die Fisch braucht.

Makefile für: ATmega1280

https://github.com/Skrupellos/Capacitive-touch-sensor/blob/master/Makefile

Vorsicht:
Für den ATmega328P (Boarduino) folgendes ändern:

      MCU = atmega1280

ändern in:

      MCU = atmega32

Code aus dem Wörkshop

              #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;
	    DDRA  = 0b11111111;
	    DDRA  = 0xFF; // alles output
	    DDRA  = _BV(PA0) | _BV(PA1) | _BV(PA2) | _BV(PA3) | _BV(PA4) | _BV(PA5) | _BV(PA6) | _BV(PA7); // Data direction register (1 = output / 0 = input)
	    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
	    
	    //
	}
projects/workshop1.1324125987.txt.gz · Zuletzt geändert: 2011/12/17 13:46 von wanda