| Both sides previous revision Previous revision Next revision | Previous revision |
| workshop:arduino [2009-06-23 21:45] – scolytus | workshop:arduino [2025-11-09 09:25] (current) – external edit 127.0.0.1 |
|---|
| * [[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]] |
| |
| 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> |
| #include <time.h> | #include <time.h> |
| #include <stdio.h> | #include <stdio.h> |
| | #include <sys/select.h> |
| |
| #define STATE_OFF 0 | #define STATE_OFF 0 |
| |
| int | int |
| main(void) | main(int argc, char* argv[]) |
| { | { |
| const char device[] = "/dev/ttyUSB0"; | char* device = argc < 2 ? "/dev/ttyUSB0" : argv[1]; |
| int fd; | int fd = open(device, O_RDWR); |
| const struct timespec sleeptime = {0, 100000000}; // 100ms | |
| | |
| 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); | struct timeval sleeptime = {0, 100000}; // 100ms |
| | select(0, NULL, NULL, NULL, &sleeptime); |
| setDTRState(fd, STATE_OFF); | setDTRState(fd, STATE_OFF); |
| nanosleep(&sleeptime, NULL); | sleeptime.tv_sec = 0; |
| | sleeptime.tv_usec = 100000; |
| | select(0, NULL, NULL, NULL, &sleeptime); |
| setDTRState(fd, STATE_ON); | setDTRState(fd, STATE_ON); |
| close(fd); | close(fd); |
| | |
| | return EXIT_SUCCESS; |
| } | } |
| </code> | </code> |