Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
workshop:arduino [2009-06-18 16:16]
equinox
workshop:arduino [2015-09-16 12:41] (current)
Line 4: Line 4:
  
 Eine Einführung in die Arduino Hard- und Software. Eine Einführung in die Arduino Hard- und Software.
- 
  
 ==== Was man installiert haben bzw. mitbringen sollte ==== ==== Was man installiert haben bzw. mitbringen sollte ====
-  * ein Laptop +  * ein Laptop ​mit installierter ​[[http://​arduino.cc/​en/​Main/​Software|Arduino Software]]
-  * die [[http://​arduino.cc/​en/​Main/​Software|Arduino Software]]+
   * ein mit der Software kompatibles [[http://​arduino.cc/​en/​Main/​Hardware|Arduino Board]]   * ein mit der Software kompatibles [[http://​arduino.cc/​en/​Main/​Hardware|Arduino Board]]
  
Line 15: Line 13:
   * [[http://​arduino.cc/​en/​Guide/​HomePage | Getting Started]]   * [[http://​arduino.cc/​en/​Guide/​HomePage | Getting Started]]
   * [[http://​arduino.cc/​en/​Reference/​HomePage| Arduino Language Reference]]   * [[http://​arduino.cc/​en/​Reference/​HomePage| Arduino Language Reference]]
 +  * [[http://​www.atmel.com/​dyn/​resources/​prod_documents/​doc8161.pdf| Atmega328 Datasheet]]
 +  * [[http://​arduino.cc/​en/​uploads/​Main/​arduino-duemilanove-schematic.pdf| Arduino Duemilanove Schematics]]
 +
 +
 +==== Nützliche Scripts ====
 +
 +UDEV Script damit für das eigene Arduino Board immer /​dev/​arduino angelegt wird.
 +
 +Eine Datei mit dem Namen ''​50-arduino.rules''​ im Verzeichnis ''/​etc/​udev/​rules.d''​ anlegen. ​
 +
 +<​code>​
 +# ardiuno rules
 +#
 +
 +SUBSYSTEMS=="​usb",​ KERNEL=="​ttyUSB*",​ ATTRS{serial}=="​A6008hTA",​ SYMLINK+="​arduino",​ OWNER="​equinox",​ GROUP="​equinox"​
 +</​code>​
 +
 +Wobei ''​OWNER''​ und ''​GROUP''​ entweder weggelassen werden kann oder durch den eigenen Benutzer und Gruppe ersetzt werden. Ausserdem muss das Feld ''​ATTRS{serial}''​ mit der Seriennummer des eigenen Arduino ersetzt werden. Die Seriennummer kann wie folge bestimmt werden. ​
 +
 +  - Arduino einstecken
 +  - mittels ''​dmesg''​ den aktuellen Device namen herausfinden (zb. /​dev/​ttyUSB0)
 +  - das Kommando ''​udevadm info --name /​dev/​ttyUSB0 --attribute-walk | grep ATTRs{serial}''​ ausführen
 +  - die erste Zeile der Ausgabe des obigen Scripts enthält die richtie Seriennnummer
 + 
 +Nach dem anlegen der UDEV Regeln muss udev neu gestartet werden. ​
 +
 +<​code>​
 +# /​etc/​init.d/​udev reload
 +</​code>​
 +
 +=== Seriellen Port reseten ===
 +
 +Ein kleines Programm, um einen Arduino zu reseten. Funktionsweise:​ Auf den Duemilanove und anderen Boards ist die DTR-Leitung über eine Kondenstaor mit dem Reset-Pin verbunden. Wird die Leitung für 100ms auf low gezogen, enstehen ein  negativer und eine positiver Spannungspuls,​ die ausreichen, das Reset durchzführen. Das passiert beim Anstecken, oder aber wenn folgendes Programm ausgeführt wird:
 +<​code>​
 +#include <​stdlib.h>​
 +#include <​termios.h>​
 +#include <​fcntl.h>​
 +#include <​sys/​ioctl.h>​
 +#include <​time.h>​
 +#include <​stdio.h>​
 +#include <​sys/​select.h>​
 +
 +#define STATE_OFF 0
 +#define STATE_ON ​ 1
 +
 +void setDTRState (int fd, int state) {
 +  int flags;
 +
 +  ioctl(fd, TIOCMGET, &​flags);​
 +  flags = (state == STATE_ON ? flags | TIOCM_DTR : flags & ~TIOCM_DTR);​
 +  ioctl(fd, TIOCMSET, &​flags);​
 +}
 +
 +int
 +main(int argc, char* argv[])
 +{
 +  char* device = argc < 2 ? "/​dev/​ttyUSB0"​ : argv[1];
 +  int fd = open(device,​ O_RDWR);
 +  if (fd == 0) {
 +    fprintf(stderr,​ "Could not open %s\n", device);
 +    return EXIT_FAILURE;​
 +  }
 +  ​
 +  setDTRState(fd,​ STATE_ON);
 +  struct timeval sleeptime = {0, 100000}; // 100ms
 +  select(0, NULL, NULL, NULL, &​sleeptime);​
 +  setDTRState(fd,​ STATE_OFF);
 +  sleeptime.tv_sec = 0;
 +  sleeptime.tv_usec = 100000;
 +  select(0, NULL, NULL, NULL, &​sleeptime);​
 +  setDTRState(fd,​ STATE_ON);
 +  close(fd);
 +
 +  return EXIT_SUCCESS;​
 +}
 +</​code>​
 +Compilieren mit
 +<​code>​gcc reset_tty.c -o reset_tty</​code>​
 +
 +Damit wird das Flashen des Arduino um einiges leichter:
 +Statt <​code>​make upload</​code>​ und wie ein Haftlmacher aufpassen wann der Reset-Button,​ jetzt neu;
 +<​code>​reset_tty;​ make upload</​code>​ und zurücklehnen
 +
 +=== Besipiel: Lauflicht ===
 +
 +Je eine LED auf Pin 2 bis 7 schalten.
 +**Achtung: Alle Anoden gemeinsam auf +5V legen!**
 +
 +Die Anoden der LEDs werden auf +5V gelegt, zum Einschalten der LED muss der entsprechende PIN deshalb auf LOW gesetzt werden.
 +
 +<​code>​
 +#define LEDS_OFF 0xFC
 +#define LEDS_ON 0x00
 +#define LEDS_INIT 0xF8
 +#define INTERVALL 50
 +
 +byte counter;
 +byte direction;
 +
 +void setup(){
 +  pinMode(13, OUTPUT);
 +  digitalWrite(13,​ LOW);
 +
 +  counter = 0;
 +  direction = 1;
 +
 +  DDRD = 0xFC;
 +  PORTD = LEDS_INIT;
 +}
 +
 +byte led_table(byte led){
 +  switch(led){
 +  case 0: return LEDS_INIT;
 +  case 1: return 0xF4;
 +  case 2: return 0xEC;
 +  case 3: return 0xDC;
 +  case 4: return 0xBC;
 +  case 5: return 0x7C;
 +  }
 +}
 +
 +byte get_next_state(){
 +  if(counter == 5)
 +    direction = 0;
 +  else if(counter == 0)
 +    direction = 1;
 +
 +  return (direction)?​(led_table(++counter)):​(led_table(--counter));​
 +}
 +
 +byte get_next_state_oneway(){
 +  counter++;
 +  counter %= 6;
 +  return led_table(counter);​
 +}
 +
 +void loop(){  ​
 +  PORTD = get_next_state();​
 +  //PORTD = get_next_state_oneway();​
 +  delay(INTERVALL);​
 +
 +}
  
 +</​code>​
  
 ---- ----
 {{tag>​workshop vortrag}} {{tag>​workshop vortrag}}
realraum Graz, Brockmanngasse 15, 8010 Graz, realraum - Verein für Technik in Kultur und Gesellschaft
  • /var/lib/dokuwiki/data/attic/workshop/arduino.1245334591.txt.gz
  • Last modified: 2009-06-18 16:16
  • by equinox