hallo!
hab mir das colors shield v1.1 zugelegt. allerdings muss ich die pinbelegung ändern, da das lcd keypad shield schon auf dem mega 2560 r3 sitzt.
was ich aber nicht verstehe sind z.b. folgende sachen
#define RST PORTF // A2 = PF2 -> woher weiß ich das? was ist pf2? wo ist hier die zuweisung?
#define RST_BIT 0x04 -> was wird hier mit dem bit gemeint (die auflösung?)
#define open_line0 {PORTH=0x20;} // D8 = PH5 -> porth wurde ja schon iwo anders benutzt für irgendwas anderes als d8. ph5
soweit ich das sehs hat das was mit dem zutun:
könnt ihr mir bei der änderung der datei helfen?
mfg
hawxgamer
/*****************************
define the IO
*****************************/
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define RST PORTF // A2 = PF2
#define RST_BIT 0x04
#define LAT PORTF // A1 = PF1
#define LAT_BIT 0x02
#define SLB PORTF // A0 = PF0
#define SLB_BIT 0x01
#define SCL PORTH // D6 = PH3
#define SCL_BIT 0x08
#define SDA PORTH // D7 = PH4
#define SDA_BIT 0x10
#define open_line0 {PORTH=0x20;} // D8 = PH5
#define open_line1 {PORTH=0x40;} // D9 = PH6
#define open_line2 {PORTB=0x10;} // D10 = PB4
#define open_line3 {PORTB=0x20;} // D11 = PB5
#define open_line4 {PORTB=0x40;} // D12 = PB6
#define open_line5 {PORTB=0x80;} // D13 = PB7
#define open_line6 {PORTE=0x20;} // D3 = PE5
#define open_line7 {PORTG=0x20;} // D4 = PG5
#define close_all_lines {PORTH=0x00;PORTB=0x00;PORTE=0x00;PORTG=0x00;}
#else // 328/168
#define RST PORTC // A2 = PC2
#define RST_BIT 0x04
#define LAT PORTC // A1 = PC1
#define LAT_BIT 0x02
#define SLB PORTC // A0 = PC0
#define SLB_BIT 0x01
#define SCL PORTD // D6 = PD6
#define SCL_BIT 0x40
#define SDA PORTD // D7 = PD7
#define SDA_BIT 0x80
#define open_line0 {PORTB=0x01;} // D8 = PB0
#define open_line1 {PORTB=0x02;} // D9 = PB1
#define open_line2 {PORTB=0x04;} // D10 = PB2
#define open_line3 {PORTB=0x08;} // D11 = PB3
#define open_line4 {PORTB=0x10;} // D12 = PB4
#define open_line5 {PORTB=0x20;} // D13 = PB5
#define open_line6 {PORTD=0x08;} // D3 = PD3
#define open_line7 {PORTD=0x10;} // D4 = PD4
#define close_all_lines {PORTD=0x00;PORTB=0x00;}
#endif // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define LED_RST_SET RST|=RST_BIT
#define LED_RST_CLR RST&=~RST_BIT
#define LED_SDA_SET SDA|=SDA_BIT
#define LED_SDA_CLR SDA&=~SDA_BIT
#define LED_SCL_SET SCL|=SCL_BIT
#define LED_SCL_CLR SCL&=~SCL_BIT
#define LED_LAT_SET LAT|=LAT_BIT
#define LED_LAT_CLR LAT&=~LAT_BIT
#define LED_SLB_SET SLB|=SLB_BIT
#define LED_SLB_CLR SLB&=~SLB_BIT
Ein Port sind immer 8 I/O Pins zusammengefasst. PF2 = PortF, Pin 2
Hier ist ein besseres Mega Pinout:
http://www.pighixxx.com/pgdev/Temp/ArduinoMega_b.png
PF2/A2 ist oben links
RST_BIT ist der Pin in Hex. 0x04 = 0000 0100b
Also ist Pin 2 definiert
Genauso bei allen anderen Pins. z.B. SDA_BIT 0x10
0x10 = 0001 0000b = Pin 4
Du musst dir dann im Pinout deinen gewünschten Pin auf dem Arduino Board suchen, den entsprechenden Pin auf dem Prozessor ablesen und dessen Port und die Pin Nummer im Header eintragen. z.B. RST soll auf Pin 38. Pin 38 ist PD7. Also:
#define RST PORTD
#define RST_BIT 0x80 //0x80 = 1000 0000b
Hex <-> Binär ist ganz einfach:
0001b = 1
0010b = 2
0100b = 4
1000b = 8
vielen dank für die antwort
ich werds mal versuchen, ansonsten muss ich wieder um hilfe bitten 
verstehe es doch nicht ganz
RST_BIT ist der Pin in Hex. 0x04 = 0000 0100b
Also ist Pin 2 definiert
0x04 ist doch vier, wieso ist hier also zwei definiert?
genauso bei deinem bsp mit 0x80, das ist doch 128 und nicht 38
bin jetzt sehr verwirrt xD
1.)
38 ist der Pin auf dem Arduino-Board. Damit kann der Prozessor nichts anfangen, weshalb die Arduino Funktionen diese auf ein anderes Format umsetzen. Auf dem Prozessor das physisch Pin 50 und logisch PD7. Letzteres ist die Information die du brauchst.
2.)
Du darfst das nicht in Dezimal umrechnen. Sondern auf die Bit-Wertigkeiten. Du fängst mit dem LSB an zu zählen. Also von rechts. Und von Null an:
für 0x04:
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0
Daher Pin 2
So verwaltet der Prozessor die Ports intern. Für jeden Port gibt es ein Data Direction Register DDRx. Darin ist 0 = Input, 1 = Output. PORTx ist das Ausgangs-Register (an dieser Stelle sind die Konstanten im Header tatsächlich verwirrend). Dazu gibt es noch ein Eingangsregister PINx.
jetzt hab ichs wirklich verstanden
vielen dank für die ausführliche erklärung
so hab die pinnummer für das 2560 geändert
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define RST PORTK // A15 = PK7
#define RST_BIT 0x80
#define LAT PORTK // A14 = PK6
#define LAT_BIT 0x40
#define SLB PORTF // A13 = PK5
#define SLB_BIT 0x20
#define SCL PORTA // D24 = PA2
#define SCL_BIT 0x04
#define SDA PORTA // D26 = PA4
#define SDA_BIT 0x10
#define open_line0 {PORTA=0x40;} // D28 = PA6
#define open_line1 {PORTC=0x80;} // D30 = PC7
#define open_line2 {PORTC=0x20;} // D32 = PC5
#define open_line3 {PORTC=0x08;} // D34 = PC3
#define open_line4 {PORTC=0x02;} // D36 = PC1
#define open_line5 {PORTD=0x80;} // D38 = PD7
#define open_line6 {PORTE=0x20;} // D3 = PE5
#define open_line7 {PORTG=0x10;} // D2 = PE4
#define close_all_lines {PORTH=0x00;PORTB=0x00;PORTE=0x00;PORTG=0x00;}
jetzt habe ich auf 3/4 der matrixfläche eine hellrosa gefärbte fläche
was muss ich bei close_all_lines ändern
und muss ich weiter unten im header-file (immer noch bei den präprozessoranweisungen) was ändern?
danke im voraus
Der untere Teil ist nicht für den Mega, sondern für den Uno:
#else // 328/168
Da musst du nichts ändern wenn du nur den Mega verwendest.
Close_lines geht im Prinzip genauso, aber die Syntax ist etwas anders. Genau wie oben musst du da nur die Pins ändern die einen Konflikt mit dem Keypad Shield haben.
Aber mal ne andere Sache. Wenn ich mir das so ansehe:
https://www.beta-estore.com/rkde/order_product_details.html?p=378
...sind die Pins doch fest vergeben wenn das gesteckt ist...
habe das gemeint gehabt
#endif // defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define LED_RST_SET RST|=RST_BIT
#define LED_RST_CLR RST&=~RST_BIT
#define LED_SDA_SET SDA|=SDA_BIT
#define LED_SDA_CLR SDA&=~SDA_BIT
#define LED_SCL_SET SCL|=SCL_BIT
#define LED_SCL_CLR SCL&=~SCL_BIT
#define LED_LAT_SET LAT|=LAT_BIT
#define LED_LAT_CLR LAT&=~LAT_BIT
#define LED_SLB_SET SLB|=SLB_BIT
#define LED_SLB_CLR SLB&=~SLB_BIT
habe jetzt probeweise das lcd shield mal runtergenommen um das mit der pinänderung zu probieren. daher wird noch nichts vom lcd abgedeckt.
daher dürfte es eigentlich keine konflikte geben oder?
und mit close lines "sperre"(was genau da passiert weiß ich nicht) ich die pins die ich nicht brauche (zb.b verwende ich nur pa0, und mit close line werden alle anderen a ports gesperrt?)
Nein, das sind nur Makros um die Pins zu setzten und zu löschen. Die nehmen die Definitionen die du oben geändert hast
Sorry, bei close_lines war ich auch etwas durcheinander gekommen. Was da genau gemacht wird ist mir nicht ganz klar, da ich das Ding nicht kenne, aber close_lines setzt alle Leitungen auf 0. Deshalb sind da alle Ports drin die vorher bei open_line verwendet wurden.
Was ich meinte ist, dass wenn das Shield auf dem Mega steckt, sind die Pins fest. Das steckt dann halt z.B. auf D3 und D4, da diese Pins physisch verbunden sind. Wenn du dann den Header änderst, schaltet der Mega anders, aber das Signal kommt nicht am Shield an. Was du da machst geht eigentlich nur wenn man das Shield absteckt und mit Kabeln verdrahtet.
Im Original sind die Leitungen auf D3 bis D13. Du hast jetzt welche auf die Doppel-Buchsenleiste gelegt. Die sind gar nicht mit dem Shield verbunden wenn es gesteckt ist.
ah ok 
Was ich meinte ist, dass wenn das Shield auf dem Mega steckt, sind die Pins fest. Das steckt dann halt z.B. auf D3 und D4, da diese Pins physisch verbunden sind. Wenn du dann den Header änderst, schaltet der Mega anders, aber das Signal kommt nicht am Shield an. Was du da machst geht eigentlich nur wenn man das Shield absteckt und mit Kabeln verdrahtet.
Im Original sind die Leitungen auf D3 bis D13. Du hast jetzt welche auf die Doppel-Buchsenleiste gelegt. Die sind gar nicht mit dem Shield verbunden wenn es gesteckt ist.
xD so hast du das also gemeint
das ist mir schon klar. das shield ist mit dupontkabeln verbunden 
ich probier das jetzt mal mit dem close line (wie du geschrieben hast, was bei open benutzt wird wieder schließen).
ich hoffe diesmal funktioniert es dann endlich 