Ports sprechen über?

Gast #273337
Lesenswert?

Hallo @all,

ich habe ein Problem mit einem ATMEGA 128.
Und zwar habe ich ein Display und ein Relais (über Transistor)
angeschlossen.
Das LCD hängt an: Daten: C0-C7, RS-D7,RW-G0,E-G1
Das Relais hängt an-G4

Das Problem ist, wenn ich das Relais anschalte mit
PORTG = (1<<PG4);     // Thermoelemente Relais an

und danach das LCD beschreibe bzw. ein Delay aufrufe, das mit
den PORTS gar nix zu tun hat, geht PG4 wieder auf 0. Irgendwie koppelt
da
was über oder den PORT hats zerkracht.
Ich hab keine Ahnung woran das liegt...Die PORTS habe ich definitiv
nicht verwechselt und Ausgänge sind auch richtig definiert-habs
durchsimuliert. Ich bentuzte AVRStudio 4.12 mit GCC , also en
C-Projekt. Danke schonmal für eure Hilfe.
#273339
Lesenswert?

Hmm, das kommt darauf an, was der Compiler aus dem LCD-Aufruf macht.
Ich sage mal, entweder Relais weg von PortG oder LCD auf 4-Bit-Betrieb
umstellen und dann PortC nur für LCD und PortG für die Schaltperipherie
nehmen.
Den LCD über 3 Ports zu verstreuen, ist nich unbedingt sinnvoll.

Gruss
Jadeclaw.
Gast #273340
Lesenswert?

crazy horse:
Ich dachte mit PORTG = (1<<PG4) wird nur G4 gesetzt und alles andere
gelassen wie es ist? Der sbi und cbi bBefehl funktioniert irgendwie
nicht mit der GCC Version. Hast du ne bessere Idee?

Jadeclaw:

Die Aufteilung habe ich wegen dem dem Layout gemacht, damit ich besser
Routen kann... eigentlich dürfte es ja ...egal sein wo was hängt.
Gast #273341
Lesenswert?

Z.B. hab ich mit einer älteren GCC Verion einzelne I/O PINS so gesetzt:


  sbi (PORTC,WR);
  cbi (PORTC,WR);

Das funktioniert wiegesagt mit der GCC Version die ich jetzt hab nicht-
das versteh ich auch nicht
Gast #273342
Lesenswert?

Ganz richtig, eine ältere Version und der wurde mit Sicherheit schon
darauf hingewiesen, dass einige Funktionen, darunter auch sbi und cbi
entfernt werden (könnten).

nutze
PORTG |= (1<<PG4);  zum Setzen
und
PORTG &= ~(1<<PG4);  zum Löschen

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