Beiträge von achim 9876

    Guten morgen

    Es gibt einige Unterschiede zum PCF8574. Arbeite im Moment vollkommen ohne INT.

    i2c.writeto(MCP_Address, bytearray(confA)) # Port A als Ausgang

    Das in meinen Augen falsch du schreibst nur eine 1 in das Register wenn ich das noch richtig weiß muss da ein F rein wenn alle Pins Inputs sein sollen am Port a oder b oder halt das bit musster das deine Taster beschreibt.

    Habe eso im Code:

    Code
    # Achtung Angabe der Pins in Hex
    confA = [MCP_IODIRA, 0x00]  # Steuert die Richtung der Daten am Port A, 0 Ausgang, 1 Eingang
    confB = [MCP_IODIRB, 0xff]  # Steuert die Richtung der Daten am Port B, 0 Ausgang, 1 Eingang
    confC = [MCP_GPPUB, 0xff]   # Schaltet Pull-up-Widerstände für Port B auf 5V
    confD = [MCP_GPIOB, 0xff]   # Spiegelt den Wert am Anschluss B wider
    
    i2c.writeto(MCP_Address, bytearray(confA)) # Port A als Ausgang
    i2c.writeto(MCP_Address, bytearray(confB)) # Port B als Eingang
    i2c.writeto(MCP_Address, bytearray(confC)) # Schaltet Pull-up-Widerstände für Port B auf 5V
    i2c.writeto(MCP_Address, bytearray(confD)) # Spiegelt den Wert am Anschluss B wider.

    Habe durch messen der Eingänge festgestellt das die 5V nicht anliegen. Nach Suche im DB habe ich festgestellt das die Angaben in HEX sein müssen. Dadurch kann man an einem Port auch eine gemischte Anordnung machen.

    Das Auslesen des Ports ist doch drin:

    Code
    confD = [MCP_GPIOB, 0xff]   # Spiegelt den Wert am Anschluss B wider
    MCP_GPIOB = 0x13     # Spiegelt den Wert am Anschluss B wider.
    i2c.writeto(MCP_Address, bytearray(confD)) # Spiegelt den Wert am Anschluss B wider.

    Es liegt jetz 5V an allen Pins von B, die Taster schalten die Ports nach GND.

    Code
    a = i2c.readfrom(MCP_Address, 0xf0)
        print(a)

    Damit sehe ich das ein Pins geschaltet wird. Leider funktioniert die Auswertung nicht wie sie soll.

    Das geht leider nicht. Sind zu viele. Dieser Code geht scheinbar nicht für meine Hardware. Im Code ist eine Bus Adresse angegeben. Teilweise verwende ich 3 bis 5 verschiedne Adressen am Bus. Wo kann ich diese eingeben. Ansonsten hat es sehr viel ähnlichkeit mit mcp23017.py. Dort sind z.B. alle register angegeben und viel mit "def". Kontte auch keine Angabe zu den genutzten Ports finden um Taster oder LEDs anzugeben. Mein Code den ich oben angegeben habe schaltet ja die LEDs. Nur die Abfrage der Taster funktioniert nicht. Leider ist im Netz zu der Abfrage sehr wenig zu finden. Hatte gehofft ein kleines Beispiel zu finden.Leider nicht.

    Das sieht nicht gut aus. In dem Code ist keinerlei Angaben zum Bus drin. Damit kann es schon mal nicht funktionieren. Das andere sieht eher nach einer ähnlichen Datei zu mcp23017.py aus. Die Register habe ich ja schon mit drin. Wahrscheinlich ist der Vergleich welche Taste gedrückt wurde etwas falsch oder das auslesen des MCP.

    Ja das steht da.

    "For example, the following will set the output values of pins 10-15 and read the logic value (True or False) of pins 0-9"

    in DE:

    "Zum Beispiel werden die Ausgangswerte der Pins 10-15 gesetzt und der logische Wert (Wahr oder Falsch) der Pins 0-9 gelesen"

    Es ist auch ein Progamm dazu:

    Leider passt der Code nicht zu meinem. Scheint auch Python zu sein, aber anders.Warum?

    Muss natürlich so aussehen. Habe was vergessen:

    Hatte bei else die : nicht kopiert oder vergessen

    Hallo Dennis

    Die meisten Programme im Netz beziehen sich auf das schreiben an den Ports. Zum lesen der Taster habe ich bisher kaum was gefunden. Wenn ich mein Programm mit den Quellen vergleiche ist eine sehr grosse übereinstimmung mit der Datei mcp23017.py vorhanden. Leider kann ich dieser Datei nicht dazu entnehmen. Die ganzen Register werden genauso genommen wie ich es auch mache. Habe diesen IC bereits mit AVR ohne Problem in den Griff bekommen. Doch leider unterscheidigt sich der Code doch etwas in Python.

    Hall(o

    versuche mit einem MCP23017 am I2C Bus Taster abzufragen. Am Port A (A0-A7) liegen LEDs. Am Port B (B0-B7) liegen Taster. Die Taster schalten nach GND. Alle LEDs kann ich ohne Problem schalten, Leider funktioniert das bei den Tastern nicht. Verwende folgenden Code dazu:

    Alles ohne Int. Hat jemand eine Idee dazu?

    achim

    Noch mal zu meinem Verständnis. Ich verwende einen 10 poligen Wannenstecker mit SCL, SDA, 2x5V, 4xGND, 12V und eine Int Verbindung. Wenn ich ein bischen längeres Kabel brauche, nehme ich 2x2 0,75 geschirmt. Beim Wannenstecker kann ich Int verbinden, beim Kabel nicht.

    Ist den Int zwingend notwendig?

    Teilweise verwende ich 3 x PFC8574, MCP23017 und manchmal auch den PCF8591 (analog) für Joustick Erfassung. Auch gleichzeitig. Wird das denn nicht zuviel? Wie soll die Auswertung erfolgen? Wenn ich z.B. mit Multitasking programmiere spielt die Auswertung eine so grosse Rolle?

    Gibt es einen bevorzugten Pin am Pico für Int? Verwende I2C 0 Pin 0 und 1.

    Warum sollte das nichts bringen?

    Ja es stimmt. Wir haben uns schon darüber unterhalten. Es geht mir hierbei um einfache Abfrage, ohne alles dabei. Da kommt es auch die Zeit nicht draufan oder das prellen. Die Nutzung von Int geht, ist klar. Bloss nicht gleich zu Anfang.

    PCF_Adresse_2.port = 0xf0 # alle LED aus utime.sleep(1)

    Habe es jetzt soweit das die Abfrage des Tasters klappt. 0xf0 ist falsch, muss 0xff sein damit klappt es super. Auch das lesen einer Adresse und schreiben auf einer anderen Adress geht.

    Hallo

    Muss noch mal fragen weil es nicht funktioniert. Die Hardware besteht aus einem Raspberry Pi Pico und 2 x PCF8574. Am ersten PCF sind 8 LEDs angeschlossen. Am zweiten PCF sind 4xTaster und 4 LEDs angeschlossen. Die Taster schalten nach GND. Die LEDs an beiden PCF kann ich ohne Probleme schalten. Das lesen des Tasters funktioniert nicht. Mein Code dazu:

    Es geht dabei nur um die allgemeine Abfrage eines Taster und schalten einer LED.

    Hallo

    Bei der Messung eines ADC Wertes am Pico mit Python bekomme ich z.B. diesen Wert angezeigt: 2.293282. Dabei schwanken meist die letzten 3 bzw. 4 Stellen. Bei einer Messung mit Multimeter bekomme ich einen Wert von 2,293 V angezeigt. Wenn ich beide Werte miteinander vergleiche liegen die Schwankunge im Bereich von 0,1 bis 1mV.

    Wie kann ich die 3 (4) letzten Stellen des Wertes (2.293282) auf- oder abrunden auf 2 Stellen nach dem Komma?

    Leider hat das Programm nicht die Formatierung gemacht wie gewünscht.

    Beispiel 1:

    Rx = 43 kOhm (gemessen 42,94k)

    ADC1 = 9535

    Vm (Summe) = 9586

    Rx = 58365 (Ohm) Anzeige Pico

    Beispiel 2;

    Rx = 1,5 kOhm (gemessen 1,487k)

    ADC1 = 57341

    Vm (Summe) = 57312

    Rx = 1434,7 (Ohm) Anzeige Pico

    Beispiel 3:

    Rx = 0

    ADC1 = 65535

    Vm (Summe) = 65538

    Rx = 0,0 (Ohm) Anzeige Pico

    Beispiel 4:

    Rx = unendlich gross (Unterbruch)

    ADC1 = 576

    Vm (Summe) = 537,6

    Rx = 1209029 (Ohm) Anzeige Pico

    So sieht es besser aus

    Morgen

    Habe den Pico nach der abgebildeten Schaltung angschlossem und möchte damit einen unbekannten Widerstand. Habe die Grössen der gemessenen Spannung und Werte der r angegeben. Habe dann die Werte mit diesem Programm gemessen:

    Das Programm funktioniert. Leider bekomme ich Werte die mich verwirren.

    Beispiel 1: Beispiel 2;

    Rx = 43 kOhm (gemessen 42,94k) = 1,5 kOhm (gemessen 1,487k)

    ADC1 = 9535 = 57341

    Vm (Summe) = 9586 = 57312

    Rx = 58365 (Ohm) Anzeige Pico = 1434,7 (Ohm) Anzeige Pico

    Wenn ich das ganze auf Unterbrechung oder Unendlich setze ergibt sich das_

    Beispiel 3: Beispiel 4:

    Rx = 0 = unendlich gross (Unterbruch)

    ADC1 = 65535 = 576

    Vm (Summe) = 65538 = 537,6

    Rx = 0,0 (Ohm) Anzeige Pico = 1209029 (Ohm) Anzeige Pico

    Die Spannung an der Z-Diode schwankt nur um wenige mV. Rechnerisch komme ich auf vernünftige Werte. Bei der Messung komme ich auf Abweichungen die ich nicht verstehe. Der RF hat immer 10 kOhm und U Z-Diode 3,328V.

    Beispiel 5: (wenn Rx und RF gleich gross sind)

    Rx = 10 KOhm gemessen

    ADC1 = 28935

    Vm (Summe) = 28803

    Rx = 12719 (Ohm) Anzeige Pico

    Habe im Netz etwas von einem Korrekturfaktor gelesen. Leider finde ich die Stelle nicht mehr.

    Morgen an die Runde

    Habe mich etwas mehr mit dem Pico und der VSYS beschäftigt. Dabei sind mir ein paar Sachen aufgefallen.

    Die Einspeisung erfolgt zur Zeit über den USB vom PC, also ca. 5V. Intern wird ja die Spannung für den Pico auf 3,3V geregelt. Wenn ich die Spannug messe (mit einem guten Messgerät) habe ich Anzeigen so zwischen 3,2.. bis 3,3... mit starken Schwankungen. Da ich den wert nicht durch 16 Bit teile kann um eine Anzeige zu erhalten mache ich es mit 8192 (13 Bit). Wenn ich mir die Werte anzeigen lasse bekomme ich Anzeigen die manchmal grösser als 13 Bit sind. Wieso?

    Wenn ich die VSYS als Ref zur Messung nehme bekomme ich die Schwankungen im Messwert angezeigt. Werde jetzt ein extra IC für die Ref nehmen. Trotzdem erhalte nach der Umrechnung mit 16 Bit starke Abweichungen von teilweise 10-20% vom errechneten Wert. Die Sache ist mir sehr unklar.

    Erfolgt die Umwandlung des ADC von der max anliegenden Spannung oder bezieht es sich auf 3,0 oder 3,3V?

    LG achim

    Da stimmt etwas nicht. Bei der Messung der Spannung ADC3 liegen doch max. 3,3V an. In Wirklichkeit so was bei 3,2...V. Der angezeigte Wert liegt bei ca. 8100 +/-. Wenn ich diesen Wert durch 65535 teile bekomme ich was bei 0. Wenn ich ein anderes Bit annehme z.B. 8192 (13 Bit ?) kommt wieder was bei. Wenn ich dann noch * vref nehme kommt was bei 3,... V raus. Wie gross ist aber vref? 3,3V oder 3,2V oder was dazwischen?

    Die Betriebsspannung beim Pico beträgt ja theoretische 3,3V. Nach Messung liegt diese bei ca, 3.2..V. Mit dem ADC3 kann man ja die Spannung messen. Der Pico verfügt ja dazu über einen 12 Bit wandler. Damit kann ich dann Werte von 0 - 4095 ausgeben. Die anderen ADC werden ja von Python auf 16 Bit umgerechnet. Wenn nich mir mit diesem Programm den Wert anzeigen lasse komme ich auf bis zu 8100.

    Finde keinen Grund für diese Werte.

    Das hatte einen anderen Grund. Habe in einem Forum eine Diskussion dazu verfolgt und da kam die Frage nach dem Widerstand. Das hat sich aber alles erledigt. Verwende den Pico, nicht Pi. Mit dem Pi konnte ich mich nicht anfreunden und bin jetzt dabei den Pico zu ergründen. Der gefällt mir sehr gut. Habe vorher sehr viel mit AVR und dem I2C Bus gemacht und möchte meine vorhandene Hardware weiter verwenden. Stelle noch eine einfache Frage für alle rein.

    Wenn ich eurer lebhaften Diskussion folge, kommt bei mir eine Frage auf, wer belegt wenn und warum?

    Warum sollte ich nicht wissen wie man einen Spannungsteiler berechnet. Da kommt doch bestimmt das ohmsche Gesetz in Frage, wenn man dann noch den unbelasteten Spannungsteiler nimmt gibt es wohl kaum Probleme.

    Bin einfach nur erstaunt wie ihr euch hier belegt oder schlimmer. Warum könnt ihr nicht vernübftig mit einander umgehen.

    Einen Spannungsteiler kann man z.B. an den ADC des Pico schalten um einen Messbereich von 0-3V auf 0-10V oder 0-30V zu erweitern. Das ganze kann man auch schaltbar machen um eine Voltmeter aufzubauen. Wenn man das ganze noch auf eine R Messung ausweitet hat man schon fast ein Multimeter, Fehlt halt noch die I-Messung (A). Dazu kommt dann noch eine automatische Messung der R Werte und eine automatische Anzeige der Norwerte nach E-Tabelle.