MyAVR Port Expander Ansteuerung

OP #4612403
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.
Gast
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 ...
(Firma: Vescomp)
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
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
[...]
OP
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.
OP
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
(Firma: Vescomp)
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
  }

 ???
(Firma: Vescomp)
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).
OP
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...
(Firma: Vescomp)
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.
(Firma: Vescomp)
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.
Angehängte Dateien:
OP
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.