18. November 2010
Asychron (RS232) Muss nur empfangen und nichts liefern Gibt Konvention wie schnell Daten gesendet werden (Übertragungsrate) Beide sind am Hören und am Senden, die Sendung kann irgendwann passieren. ca. 320'000 pro Sekunde Baugruppen werden angesprochen, wie LCD Anzeige oder Servocontroller (Geräte mit Stecker sind immer Asychron) Synchron (SPI) Mit Clock werden die Signale aufeinander abgestimt und senden im gleichen Takt. Geschwindigkeit legt Master fest. Es gibt Timingdiagramme die eingehalten werden müssen. Braucht mehr an Kabelverbindungen. Nackte Chips werden angesprochen, Speicherchips, digitales Potentiometer. Mikrokontroller als Master SCK Clock Pin SO Datenoutput CS Chip Select macht, das Chips hören. Micro Serial Servo Controller Byte 1 = Startbyte = 255 (konstant) Byte 2 = Servonummer = 0-7 für 0-90° und 8-15 für 0-180° Auflösung Byte 3 = Servoposition = 0-254/* example to control pololu serial servo board with software serial on pins 2 and 3 of arduino see user guide http://iad.projects.zhdk.ch/physicalcomputing/wp-content/files/ssc03a_guide.pdf error codes of indicator leds are on page 4 of the user guide */ #include <SoftwareSerial.h> // only speeds up to 9600 baud possible #define rx 3 // rx = receive data #define tx 2 // tx = transceive = send data SoftwareSerial mySerial = SoftwareSerial(rx, tx); // the setup ------------------------------------- void setup(){ pinMode(rx, INPUT); pinMode(tx, OUTPUT); mySerial.begin(9600); } // the loop -------------------------------------- void loop(){ for (int a = 0; a<254; a=a+10){ position(a); delay(100); position(0); delay(100); } } // function -------------------------------------- void position(byte degree){ mySerial.print(255, BYTE); // Protocol Header mySerial.print(8, BYTE); // Servo 0 from 0 - 180° mySerial.println(degree, BYTE); // set degree delay(1000); mySerial.print(255, BYTE); // Protocol Header mySerial.print(9, BYTE); // Servo 0 from 0 - 180° mySerial.println(degree, BYTE); // set degree }LCD Anzeige
#include <SoftwareSerial.h> #define txPin 2 SoftwareSerial LCD = SoftwareSerial(0, txPin); // since the LCD does not send data back to the Arduino, we should only define the txPin void setup() { pinMode(txPin, OUTPUT); LCD.begin(9600); } void loop() { clearLCD(); delay(500); // verschieben(); selectLineOne(); delay(100); LCD.print("CIAO"); delay(500); selectLineTwo(); delay(100); LCD.print("SIBYLLE"); delay(500); backlightOn(); delay(500); backlightOff(); delay(500); } void verschieben(){ LCD.print(0x1C, BYTE); } void backlightOn(){ //turns on the backlight LCD.print(0x7C, BYTE); //command flag for backlight stuff LCD.print(157, BYTE); //light level. } void backlightOff(){ //turns off the backlight LCD.print(0x7C, BYTE); //command flag for backlight stuff LCD.print(128, BYTE); //light level for off. } void clearLCD(){ LCD.print(0xFE, BYTE); //command flag LCD.print(0x01, BYTE); //clear command. } void selectLineOne(){ //puts the cursor at line 0 char 0. LCD.print(0xFE, BYTE); //command flag LCD.print(128, BYTE); //position } void selectLineTwo(){ //puts the cursor at line 2 char 0. LCD.print(0xFE, BYTE); //command flag LCD.print(192, BYTE); //position }