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
Next revision Both sides next revision
workshop:arduino [2009-06-23 23:23]
trapicki
workshop:arduino [2009-06-24 00:38]
equinox
Line 13: 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/​doc8025.pdf| Atmega328 Datasheet]]+  * [[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]]   * [[http://​arduino.cc/​en/​uploads/​Main/​arduino-duemilanove-schematic.pdf| Arduino Duemilanove Schematics]]
 +
  
 ==== Nützliche Scripts ==== ==== Nützliche Scripts ====
Line 46: Line 47:
 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: 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>​ <​code>​
 +#include <​stdlib.h>​
 #include <​termios.h>​ #include <​termios.h>​
 #include <​fcntl.h>​ #include <​fcntl.h>​
Line 64: Line 66:
  
 int int
-main(void)+main(int argc, char* argv[])
 { {
-  const char device[] = "/​dev/​ttyUSB0"; ​ 
   int fd;   int fd;
   const struct timespec sleeptime = {0, 100000000}; // 100ms   const struct timespec sleeptime = {0, 100000000}; // 100ms
 +  char* device = argc < 2 ? "/​dev/​ttyUSB0"​ : argv[1];
  
   fd = open(device,​ O_RDWR);   fd = open(device,​ O_RDWR);
   if (fd == 0) {   if (fd == 0) {
-    ​printf("​Could not open %s\n", device); +    ​fprintf(stderr, ​"Could not open %s\n", device); 
-    return ​1;+    return ​EXIT_FAILURE;
   }   }
   ​   ​
-  printf ("​Resetting %s\n", device); 
   setDTRState(fd,​ STATE_ON);   setDTRState(fd,​ STATE_ON);
   nanosleep(&​sleeptime,​ NULL);   nanosleep(&​sleeptime,​ NULL);
Line 83: Line 84:
   setDTRState(fd,​ STATE_ON);   setDTRState(fd,​ STATE_ON);
   close(fd);   close(fd);
 +
 +  return EXIT_SUCCESS;​
 } }
 </​code>​ </​code>​
Line 92: Line 95:
 <​code>​reset_tty;​ make upload</​code>​ und zurücklehnen <​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/pages/workshop/arduino.txt
  • Last modified: 2015-09-16 12:41
  • (external edit)