Probleme bei ansteuerung von LCD über verschiedene PORTs-Pin

Gast #1440593
Lesenswert?

Hi leute

wie das Thma schon sag ich versuche aus Pin-Verteilungsgründe mein  LCD 
über vierschiedene Portpins im Betrieb zu nehmen  und es klappt nicht.

hier ist es konkret. ich möchte am PORTD die PIND0 bis PIND3 benutzen 
für DA4 bis DA7 und am PORTA  die PINA4  für RS  und PINA5 für E nehmen.

Es klappt aber nicht .

wenn ich aber statt am port A am PORTD die Leitungen RS und E  jeweil am 
PIND4 und PIND5 einschliesse läuft alles wunderbar.

Was ist der Grund ?  Hat eine schon ein Problem damit gehabt ???
Wie ist es lösbar nicht alle Leitung auf einem Port anzuschliessen und 
trotzdem eine Funktionierendes Routine zu bekommen?


Danke für Hilfe

Karl
Gast #1440596
Lesenswert?

Hi

>Wie ist es lösbar nicht alle Leitung auf einem Port anzuschliessen und
>trotzdem eine Funktionierendes Routine zu bekommen?

Indem man es richtig macht. Aber Ernst beiseite. Wahrscheinlich hast du 
die Pinwanderung nicht vollständig gemacht. Wie wäre es mal mit dem 
Code?.

MfG Spess
#1440598
Lesenswert?

Ich finde deinen Post ja mal richtig klasse: Keine Problembeschreibung, 
kein Code, kein Schaltplan...

Es spricht ja nichts dagegen, die Pin querbeet zu verteilen (OK, für ein 
Grafikdisplay könnte es u.U. zu langsam werden), wenn man darauf achtet, 
die anderen Pins nicht zu verstellen (In der Codesammlung gibt's ne 
(GCC)C-Library, bei der die 6 Pins von Text-LCDs beliebig verteilt 
werden können - für AVRs).

hth, Jörg

edit: Ich seh grad: deine Hardware verschweigst du ja auch noch
Gast #1440630
Lesenswert?

> ich möchte am PORTD die PIND0 bis PIND3 benutzen
> für DA4 bis DA7 und am PORTA  die PINA4  für RS  und PINA5 für E nehmen.
Und dann
> hier ist ein code abschnitt im Anhang am PORTC
Ja, was denn jetzt?

Probiers mal so:
1
    if (rs) PORTE |= (1<<4);  // Zustand für RS-Leitung --- PINA4  für RS
2
    else    PORTE &=~(1<<4);
3
    PORTD = (PORTD&0xF0)|(data>>4)&0x0F;// output high nibble first 
4
  lcd_flash_e ();    
5
    PORTD = (PORTD&0xF0)|(data&0x0F);   // output low nibble
6
  lcd_flash_e ();
7
  delay(2000);
8
}
9

10
void lcd_flash_e ()
11
{
12
  PORTE |=  (1<<5);    // Enable = HIGH --- PINA5 für E
13
  delay(1);
14
  PORTE |= ~(1<<5);    // Enable = LOW
15
  delay(64);
Warum muß eigentlich jeder das Rad immer wieder neu erfinden?
Gast #1440657
Lesenswert?

ja danke


aber an dem Code liegt es nicht .
wie gesagt  es funktioniert  ganz gut  , wenn die PINs  vortlaufen 
beschaltet sind.  Aber wenn ich zum beispiel von 0 bis 3 beschalte und 
weiter von 6 bis 7 die E und RS Leitungen  anschließe, geht es dann halt 
nicht. (Code bleibt unverändert aber nur die PORTsPin ändern sich).

Ich kappiere dass einfach nicht.
#1440743
Lesenswert?

Hallo,
Karl schrieb:
> aber an dem Code liegt es nicht .
> wie gesagt  es funktioniert  ganz gut  , wenn die PINs  vortlaufen
> beschaltet sind.  Aber wenn ich zum beispiel von 0 bis 3 beschalte und
> weiter von 6 bis 7 die E und RS Leitungen  anschließe, geht es dann halt
> nicht. (Code bleibt unverändert aber nur die PORTsPin ändern sich).
>
> Ich kappiere dass einfach nicht.

Ich Deinen Text auch nicht...
Wieso soll es bei unverändertem Code plötzlich an anderen Pins 
funktionieren?

Gruß aus Berlin
Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren