Hallo, ich habe ein 2x16 Zeichen LCD an einem ATtiny2313 hängen. Damit sich ein einfacheres Platinenlayout einstellt habe ich jetzt die Pinbelegung alternativ belegt: PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 NC NC RS EN DB4 DB5 DB6 DB7 Jetzt NC NC EN RS DB7 DB6 DB5 DB4 Vorher So brauche ich in Eagle keine Drahtbrücken mehr. Problem sind die genau getauschten Datenpins, wie kann man das am elegantesten bewerkstelligen?
Gast
#2071530
> PD7 PD6 PD5 PD4 PD3 PD2 PD1 PD0 > NC NC RS EN DB4 DB5 DB6 DB7 Jetzt > NC NC EN RS DB7 DB6 DB5 DB4 Vorher ^^^^^^^^^^^^^^^ D.h. du musst 4 Bits in Software drehen statt 1:1 den Tutorialcode zu übernehmen. Das ist grundsätzlich machbar, aber für Anfänger fehlerträchtig.
Gast
#2071532
Alternative #1: Nimm BASCOM. Dort kannst du die Pinzuordnung beim LCD frei konfigurieren.
Gast
#2071539
Hi Beschäftige dich doch erst ein mal mit dem Programmieren dann mit dem Layout. Sonst mutiert dein µC als "crashdemon" und du hast probleme und zu viel arbeit hinter/vor dir ;) Grüße
> D.h. du musst 4 Bits in Software drehen statt 1:1 den Tutorialcode zu > übernehmen. Das ist grundsätzlich machbar, aber für Anfänger > fehlerträchtig. Hehe, ja. Dachte da an soetwas wie einen Shift 0001 1000 0011 1100 0111 1110
Nett gemeint schrieb: > Hi > Beschäftige dich doch erst ein mal mit dem Programmieren dann mit dem > Layout. > Sonst mutiert dein µC als "crashdemon" und du hast probleme und zu viel > arbeit hinter/vor dir ;) > Grüße Das Programm steht schon, lief früher auf einem Atmega8 auf Streifenraster, da es dann mal ein wenig schöner werden sollte, platine etc. habe ich es dann auch gleich auf einem ATtiny portiert, der für meinen verwendungszweck mehr als ausreichend ist.
Die Pins füre LCD sind völlig egal, die kannst Du bunt durcheinander würfeln Und im h-File legst Du fest, auf welchem Port und Bit jeder liegt. http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296 Peter
Patrick Langosch schrieb: > Dachte da an soetwas wie einen Shift Das ist garantiert kein Bit-Shift. Beim Schieben bleibt die Bitreihenfolge prinzipiell gleich. Was du brauchst, ist ein Bit-Swap...
Gast
#2071556
Brute Force
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Gast
#2071569
Hier mal was zum Umdrehn:
1 | |
2 | |
3 | |
4 | |
5 | |
Damit machst du aus DB7 DB6 .... DB0 einfach DB0 DB1 .... DB7 Also alles was gesendet wird umdrehen und dann High- und Low-Nibble beachten ;) anr
joar, dankeschön werd mal mein Glück versuchen
Gast
#2071594
Hier mal was zum Umdrehn:
unsigned char umkehr(unsigned char n){
uint8_t mask, temp;
mask = 0x01;
temp = 0;
do
{
if(n & mask) temp |= 0x80;
mask <<= 1;
if(mask) temp >>= 1;
} while(mask);
return temp;
}
avr schrieb: > Hier mal was zum Umdrehn:
1 | |
2 | |
3 | |
4 | |
5 | |
Wenn man mit Flash nicht sparen muß, kann man es so machen. Ansonsten besser so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Peter
Wenn du den ASCii Code änderst, kannst du dein Code so lassen und die Rechenzeit für die Bit -schieberei sparen. Oder, wenn es nicht allzuviel Text ist einfach als (schon umgewandeltes) Hex eingeben. Ich programmiere zwar ASM, aber in C geht das sicher auch.
Jürgen W. schrieb: > Wenn du den ASCii Code änderst, kannst du dein Code so lassen und die > Rechenzeit für die Bit -schieberei sparen. Und wenn man kaltes Wasser braucht, stellt man heißes Wasser in den Kühlschrank. Peter
Gast
#2071634
Alternativ wäre auch eine Look-Up Table. Bei 16Byte ist das noch überschaubar.
Also irgendwie schein ich da noch eine Bug drin zu haben, zumindest zeigt das LCD nur wirres zeugs an. Mit den Änderungen sollte es dann doch eig. so aussehen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
mit
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Die LCD Initialisierung habe ich auch angepasst, die scheint zu funktionieren.
Gast
#2071693
hast du auch bei der Datenausgabe geswapt?
jop, deswegen bin ich ja irritiert.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
Gast
#2071718
Wenn du mit AVR-GCC-Tutorial/LCD-Ansteuerung arbeitest, bietet sich an, die Änderung zentral in lcd_out() zu machen, statt mehrfach in LCD_init, LCD_command und LCD_data.
Gast
#2071724
Der Swapcode ist ja auch falsch. Passt den niemand mehr auf?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Helfer schrieb: > Der Swapcode ist ja auch falsch. Passt den niemand mehr auf? tatsache, jetzt fluppt es
Gast
#2071805
>Alternativ wäre auch eine Look-Up Table. Bei 16Byte ist das noch >überschaubar. Keep it simple and stupid :-) Warum blos müssen die Leute für so nen Kiki immer gleich nen Code bauen, obwohl es ein kleines Konstantenarray kurz und schmerzlos erledigen würde?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.