Entsprechend dem Instruction Panel beim Step Sequencer Enwurf, enthält das LCD Shield neben einem 2x16 Zeichen LCD (Hitachi HD44780 kompatibel), 6 Taster und einen Encoder inkl. Taster für die Menü-Navigation und zur Dateneingabe.
Hier der Schaltplan und das Platinen Layout entworfen mit Eagle von CadSoft:
Die entsprechenden Dateien sind hier als Download zu finden:
http://hardsoldered.de/downloads.html
Die Ätzmaske habe ich per Tonertransfer-Verfahren auf kupferkaschiertes Epoxyd-Platinenmaterial übertragen.
Eine Anleitung dazu habe bei Thomas Pfeifer gefunden und Versuche mit unterschiedlichen Papiersorten und "Bügelzeiten" durchgeführt. Nach 3 Versuchen kam ein brauchbares Ergebnis - zwar mit deutlichem Optimierungspotential - zustande und wurde sogleich geätzt:
Die Platine zeigt deutlich, dass der Toner nicht gleichmäßig haftete und nicht gleichmäßig verdichtet wurde. Aber die Leiterbahnen waren alle durchgängig und ohne Kurzschluss, ebenso die Pads. Also stand der weiteren Bearbeitung nichts im Wege.
Nach dem endgültigen Zuschnitt der Platine folgte das Bohren mit 0,8 mm und 1 mm Bohrern und anschließend das Bestücken:
Danach folgten die ersten Tests. Hier natürlich der übliche "Hello World"-Test für die LCD Anzeige: Arduino LCD Tutorial
Im Anschluss habe ich den Code angepasst, um auch den Encoder und die Taster abzufragen und die Aktionen auf dem Display anzuzeigen.
Und hier nun das Ergebnis:
Code:
/*
LCD Shield Test Routine V 0.1 Chris 130405 The circuit: * LCD RS pin to digital pin 12 * LCD Enable pin to digital pin 11 * LCD D4 pin to digital pin 5 * LCD D5 pin to digital pin 4 * LCD D6 pin to digital pin 3 * LCD D7 pin to digital pin 2 * LCD R/W pin to ground * 10K resistor: * ends to +5V and ground * wiper to LCD VO pin (pin 3) * Encoder push switch at digital pin 8 * Encoder A/B at digital pins 9, 10 * Button 1..6 at analog pin 0..5 */ // include the library code: #include <LiquidCrystal.h> #include <Encoder.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); Encoder myEnc(9, 10); // initialize the button pins: int buttonPin[] = {8, A5, A4, A3, A2, A1, A0}; // initialize values: int val[] = {1,1,1,1,1,1,1}; int banz = 7; int resetButton = 0; void setup() { // set pinModes for button pins: for( int i=0; i<banz; i++) { pinMode( buttonPin[i], INPUT ); digitalWrite( buttonPin[i], HIGH); } // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("Test:"); } long oldPosition = -999; void loop() { // Encoder test routine: long newPosition = myEnc.read(); if (newPosition != oldPosition) { lcd.home(); lcd.print("Encoder Test: "); oldPosition = newPosition; lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(newPosition); } // button test routine: for( int i=0; i<banz; i++) { int newval = digitalRead( buttonPin[i] ); if( newval != val[i] ){ val[i] = newval; lcd.home(); lcd.print("Button Test: "); lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor( 0, 1 ); if( val[i] != 1 ){ lcd.print(i); // reset encoder value with encoder button if( i == resetButton ){ myEnc.write(0); } } } } } |
Ätzen gut - alles gut.