Forum: Mikrocontroller und Digitale Elektronik MyAVR Port Expander Ansteuerung


von Rene P. (renegade37)


Lesenswert?

Hallo, ich bin neu hier und habe ein paar Grundkenntnisse in 
Microcontrollerprogrammierung, aber ich habe einige Probleme einen Port 
Expander anzusteuern.
Meine Hardware ist folgende:

-MyAVR MK2 Board mit Atmega8
-MyTWI Port Expander
-MYAVR LCD

Ich kann leider nur den ganzen A-Port bzw. den ganzen B-Port ansteuern, 
aber nicht die einzelnen Bits. Des Weiteren habe ich versucht einen 
Eingang des Port Expanders mit einem "normalen" Eingang an der 
Hauptplatine mittels einer IF Funtion zu verknüpfen, auch das 
funktionerte nicht. Selbst eine simple Ansteuerung durch einen Ausgang 
direkt an der Hauptplatine mit einem externen Eingang funktionierte 
nicht.

Habe früher schon mit dem Teil gearbeitet, aber bin da noch schlechter 
durchgestiegen als jetzt.

von W.A. (Gast)


Lesenswert?

Rene P. schrieb:
> Ich kann leider nur den ganzen A-Port bzw. den ganzen B-Port ansteuern,
> aber nicht die einzelnen Bits.

Das ist sehr bedauerlich.

> Habe früher schon mit dem Teil gearbeitet, aber bin da noch schlechter
> durchgestiegen als jetzt.

Dann besteht doch Hoffnung. Nur Mut ...

von Rene P. (renegade37)


Lesenswert?

Das Problem hierdran ist, das es sich hier um ein Projekt handelt, 
welches relativ schnell abgearbeitet werden muss und ich nur als 
Unterstützung helfe

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rene P. schrieb:
> Das Problem hierdran ist, das es sich hier um ein Projekt handelt,
> welches relativ schnell abgearbeitet werden muss und ich nur als
> Unterstützung helfe

Rene P. schrieb:
> Ich kann leider nur den ganzen A-Port bzw. den ganzen B-Port ansteuern,
> aber nicht die einzelnen Bits. Des Weiteren habe ich versucht einen

 Natürlich kann man nur den ganzen Port ansteuern, man kann aber
 vorher einzelne bits setzen, bzw. löschen.

 Hier ein Beispiel wie man Werte ausgibt (in Pseudo Sprache), da du
 nicht geschrieben hast, welche Sprache benutzt wird:
1
 Do
2
  I2C_Start()
3
  I2C_Write(Adress)
4
  I2C_Write(6)           // PortA  CONFIG
5
  I2C_Write(0b00001111)  // bits 7-4 AUSGANG, 3-0 EINGANG
6
  I2C_Stop()
7
8
  Wert = 0x70            // Setze bits 4-6
9
  I2C_Start()
10
  I2C_Write(Adress)
11
  I2C_Write(2)           // PORTA
12
  I2C_Write(Wert)  
13
  I2C_Stop()
14
15
  Delay(1000)            // 1000ms (1sec) warten
16
17
  Wert = Wert AND 0x30   // Jetzt wird bit 6 geloscht
18
  I2C_Start()
19
  I2C_Write(Adress)
20
  I2C_Write(2)           // PORTA
21
  I2C_Write(Wert)  
22
  I2C_Stop()
23
24
  Delay(1000)            // 1000ms (1sec) warten
25
 Loop

: Bearbeitet durch User
von Holger L. (max5v)


Lesenswert?

http://www.myavr.info/download/produkte/mytwi/techb_mytwi-portexpander_de_en.pdf
[...]
void outPorts(uint8_t data, uint8_t ackn)
zur Übermittlung der gewünschten Pinbelegung (=data).
[...]

Liest sich zumindest beim Durchblättern der PDF ein wenig komisch.


Hast du den Code aus der oben genannten Quelle genutzt?
Wenn ja sollte es genügen das 0xFF aus der Funktion outPorts(1,0xFF) mit 
dem entsprechenden Hexwert zu ersetzen. z.B. 0x81 für das erste und 
letzte Bit an PortB.
1
[...]
2
data=readPorts(0); // Abfrage Pins an PortA
3
if(data == 0xFE) // Taster gedrückt
4
{
5
outPorts(1,0xFF); // alle Pins an PortB geschalten
6
}
7
else
8
{
9
outPorts(1,0x00); // kein Pin an PortB geschalten
10
}
11
[...]

von Rene P. (renegade37)


Lesenswert?

Oh sorry, in C sind wir da dran.

Versuche grade einige andere Programme zusammen zusetzen, aber ich habe 
ständig Fehlermeldungen bezüglich fehlender Libs, obwohl ich diese auch 
im Projektordner abgelegt habe. Weder <> noch"" hilft mir da, habe auch 
schon den ganzen Pfad mit angegeben, aber das bringt auch nichts.

von Rene P. (renegade37)


Lesenswert?

Ja den Code habe ich genutzt, habe auch schon die ganzen Eingänge A0-A7 
/ B0-B7 per Hex Wert rausgefunden.Nur sehe ich da das Problem, wenn ich 
einige Eingänge durch die Hauptplatine mit dem Port Expander nutzen 
möchte, dann passiert am µC nix,und wenn ich einige Eingänge des Port 
Expanders auslese und ein anderer wird betätigt, der eigentlich nichts 
damit zu tun haben sollte, dann wird die Funktion nicht TRUE

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rene P. schrieb:
> Nur sehe ich da das Problem, wenn ich
> einige Eingänge durch die Hauptplatine mit dem Port Expander nutzen

 Und ich sehe da das Problem im fehlendem Code.

: Bearbeitet durch User
von Rene P. (renegade37)


Angehängte Dateien:

Lesenswert?

Im ANhang habe ich das gestrige, gesamte Programm. Wie gesagt, momentan 
bin ich dabei es aufzustückeln um Fehler auszmärzen, aber da bin ich 
noch nicht so weit gekommen.

Danke im Voraus!

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rene P. schrieb:
> Danke im Voraus!
1
  if   (data == 0xFE) // Taster gedrückt
2
  {
3
    outPorts(1,0xFF); // alle Pins an PortB geschalten
4
  }
5
  else
6
  {
7
    outPorts(1,0x00); // kein Pin an PortB geschalten
8
  }
 Da werden (meiner Meinung nach) Pins in PINB entweder auf 0 oder 1
 gesetzt, aber das ist Eingang.

 Sollte das nicht so sein:
1
  if   (data == 0xFE) // Taster gedrückt
2
  {
3
    outPorts(2,0xFF); //*** alle Pins an PortB auf Log.1
4
  }
5
  else
6
  {
7
    outPorts(2,0x00); //*** alle Pins an PortB auf Log.0
8
  }

 ???

: Bearbeitet durch User
von Rene P. (renegade37)


Lesenswert?

Also laut MyTWI Port Expander PDF wäre 0,0xFE Eingang A0 und 1,0xFF alle 
Ausgänge auf der B Seite

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rene P. schrieb:
> Also laut MyTWI Port Expander PDF wäre 0,0xFE Eingang A0 und 1,0xFF alle
> Ausgänge auf der B Seite

 Edit ging nicht mehr, also:
 Adresse PinA  = 0    // Eingang, Wert lesen
 Adresse PinB  = 1    // Eingang, Wert lesen
 Adresse PortA = 2    // Ausgang, Wert schreiben
 Adresse PortB = 3    // Ausgang, Wert schreiben

 Ich habe die Adresse im vorigem Beitrag auch falsch geschrieben,es
 sollte 3 sein (fur PortB - Wert AUSGEBEN).

: Bearbeitet durch User
von Rene P. (renegade37)


Lesenswert?

OK Danke ich versuchs gleich mal. Wie sieht es eigentlich mit der 
Verbindung mit den normalen Ein- und Ausgängen aus?

z.B.: if ( PC0 AND (!(1<<PC1) && 0,0xFE)
      {
         PB0  // schalte Ausgang B0
      }

von Rene P. (renegade37)


Angehängte Dateien:

Lesenswert?

Habe es jetzt mla probiert, geht aber mal wieder nix :-/ habe jetzt mal 
das aktuelle Prog hier im Anhang vielleicht hilft das weiter

von W.A. (Gast)


Lesenswert?


von Rene P. (renegade37)


Lesenswert?

Da kamen wohl ein paar Fehler auf einmal rein, war eigentlich auch nur 
so als Beispiel gedacht.

if ( (!(data==1,0xFB)) && Endschalter_eingefahren  && Regensensor )

So in etwa sollte das Aussehen

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rene P. schrieb:
> So in etwa sollte das Aussehen

 Hast du es überhaupt geschafft, irgendetwas zu senden oder zu
 empfangen ?
 Hast du einen LogicAnalyzer ?

von Rene P. (renegade37)


Lesenswert?

Mit dem Code nicht, habe aber vorher meine Taster usw. direk aufs Board 
verdrahtet, und den Code angepasst, dann ging es. Aber mit dem Port 
Expander und die LCD Anstuerung machen mir noch zu schaffen.
Nen LogicAnalyzer habe und kenne ich nicht, wollte über AVR Studio 5 
oder 7 versuchen zu simulieren, aber das ist auch noch ne Baustelle.

Sobald dieses Projekt durch ist, werde ich mich da weiter vertiefen, nur 
momentan habe ich kaum noch Zeit für etwas anderes...

von W.A. (Gast)


Lesenswert?

Rene P. schrieb:
> So in etwa sollte das Aussehen

Ich hatte hauptsächlich Bedenken bei dem "!".

Guck dir mal den Unterschied zwischen den Operatoren "!" und "~" an.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rene P. schrieb:
> Mit dem Code nicht, habe aber vorher meine Taster usw. direk aufs Board
> verdrahtet, und den Code angepasst, dann ging es. Aber mit dem Port

 Ohne Ausgabe (und wenn es nur LEDs sind) wirst du ganz einfach nicht
 weiterkommen.
 Übersetze den Beitrag "Re: MyAVR Port Expander Ansteuerung"
 verbinde PortB.4-PB.6 über entsprechende Widerstände mit LEDs und lass
 es laufen, dann weisst du wenigstens ob die Ausgabe funktioniert.

von Rene P. (renegade37)


Lesenswert?

Komme aus der SPS Technik, deshalb denke ich da mehr an negation eines 
Pins / Eingangs als an eine komplette Bitnegierung

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Marc V. schrieb:
> Übersetze den Beitrag "Re: MyAVR Port Expander Ansteuerung"
>  verbinde PortB.4-PB.6 über entsprechende Widerstände mit LEDs und lass
>  es laufen, dann weisst du wenigstens ob die Ausgabe funktioniert.

 Edit ging nicht mehr, es ist PortA.4 - PortA.6

von Rene P. (renegade37)


Lesenswert?

Das geht nicht :-/ hast Du den Code auch in c?

von Marc V. (Firma: Vescomp) (logarithmus)


Angehängte Dateien:

Lesenswert?

Rene P. schrieb:
> Das geht nicht :-/ hast Du den Code auch in c?

 Nein.
 Flashe mal das angehängte HEX.
 PA.0-PA.3 sind Eingänge, PortA.4-PA.7 sind Ausgänge.

 PA.4 und PA.7 gehen auf 1, PA.5 und PA.6 auf 0
 1sec. Pause
 PA.5 und PA.6 gehen auf 1, PA.4 und PA.7 auf 0
 1sec. Pause
 und wieder von vorne.

 Probiere es mal, dann sehen wir weiter.

von Rene P. (renegade37)


Lesenswert?

Habe das Programm jetzt drauf. Die Leds leuchten abwechselnd, das passt. 
Die Eingänge werden bei dem Programm aber nicht abgefragt oder sehe ich 
das falsch? Habe leider nur 2 Taster grade zur Verfügung und habe diese 
doppelt ausgegeben

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.