- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 24

Thema: PCF8574p macht Probleme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    75
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo Fred der Code ist in Arduino C geschrieben:
    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*   i2c_expander.c                                                               */
    /*   (c) 2013 Gerhard Hinze                                                   */
    /*                                                                            */
    /*   Description                                                              */
    /*                                                                            */
    /* ========================================================================== */
    #ifndef F_CPU
    //#define F_CPU  3686400UL     // STK500
    #define F_CPU   16000000UL     // Arduino UNO...etc
    #endif
    /* ========================================================================== */
    /*                                                                            */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    #include <avr/io.h>
    #include <util/delay.h>
    #include <Wire.h>
    /* ========================================================================== */
    /*                                                                            */
    /*                                                                            */
    /*                                                                            */
    /*                                                                            */
    /* ========================================================================== */
    
    
    
    #define expander 0x20  
    byte wert= 0xff ;
    void setup() 
      {
      Wire.begin(); //Initialisieren der I2C Verbindung.
      }
    
    void loop() 
      {
      Wire.beginTransmission(expander); //Öffnen I2C Verbindung
      Wire.send(wert);                        //Schreiben des Bytes. 
      Wire.endTransmission();               //Schliessen I2C Verbindung
      delay(100);
      if (wert==0) 
       {
       wert =0xff; 
       }
      else
       {
       wert = wert--;
       }
      }
    /* ========================================================================== */
    Was meinst Du eigendlich mit der ".bas - Zentrale" da sehe ich nicht ganz durch...

    Ich kann zwar , bzw. besitze Bascom, aber ic h habe mich wegen AVR-Studio und Arduino auf C "spezialisiert"..

    @Achim bei mir bleibt der Zustand auch nach Trennung von +Ub vom Expander bis zum neuen Betrieb bestehen.
    darum setze ich alles auf High, also senden von 0xff beim Start..aber so richtig will das noch nicht gehen...

    Gerhard
    Geändert von oderlachs (08.03.2014 um 14:46 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    70
    Beiträge
    348
    Hallo gerhard
    scheinen beide das gleiche Problem zu haben. Auf einer andeen Seite wurde mr gesagt, das beim Anlegen der Spannung (nur der Spannung) alle Ausgänge einschalten, sorry das wort dafür vergessen.
    achim

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213

    Hallo Gerhard,
    möchte nochmals auf meine Hinweise für Antwort von RFM12 mit Pollin Anfrage hinweisen.
    Die Programmieren in Assembler oder C ist das Effektivste, sagen die Experten, aber nach meiner Meinung ist der Binärcode nach wie vor Entscheidend. Somit bin ich auf BASECOM umgestiegen. Für meine vielen Anwendungen benötige ich ja nicht unbedingt „Echtzeiten“(ist ja auch technisch mit den Atmega’s kaum möglich)
    Der BASCOM- Compiler macht dies schon sehr gut und vor allen Dingen die vielen Lib’s die zu Verfügung stehen, erleichtern schon erheblich den Programmieraufwand. Auch die Lesbarkeit und Syntaxprüfungen finde ich sehr hilfreich in dieser Ebene.
    Diese BAS können mit Editor gut gelesen werden und somit sind diese auch für C Anwender mit Erfahrung gut umsetzbar aber nicht umgekehrt für C- Unerfahrene.
    Auch die nach Compile erzeugten Bin- Hexdateien können sogar in SPI- Industrieanwendungen übernommen werden.
    Schaut man sich die vielen Bascom Lib’s an erkennt man schon, Bascom ist nicht das alte „lahme“ Basic.
    Aber jeder soll sein „Ding“ machen wie er es als gut empfindet.
    Denn nur der Erfolg zählt.

    Gruß
    Fred


  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    70
    Beiträge
    348
    Hallo fredred
    das mit echtzeit ist so eine Sache, es ist relativ möglich. Habe einen längeren teil mit dem 128 geschrieben. Dabei war der Prz dabei mehrere Timer und Ausgänge fast gleichzeitig zu machen. Fast bedeutet dabei, er konnte z.B. mehere LED fast gleichzeitig schalten, dabei auch noch eingänge abfragen und einiges mehr. Die Zeiten lagen dabei für einen kompletten Durchlauf bei 1 bis 5 ms, teilweise auf 100us. Wichtig dabei ist auch, das kein extra RS oder so geladen werden muss. Sonst besteht die Gefahr das neben dem RS noch 10 Befehle Platz haben. Ist ein Multitasking.
    achim

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hallo Achim,

    ist völlig OK. „ Ist ein Multitasking“
    Aber hast du schon mal versucht viele Funksignale, DCF- Signal, 1wirte- Bus und ca. 10 I²C Busteilnehmer in Echt abzufragen. Natürlich auch auswerden und auf LCD anzuzeigen.
    Dies alles in ca. 100 µs. Währe schon sehr Interesand für mich, wie du es erfolgreich, umsetzen kannst.

    Gruß
    Fred

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    70
    Beiträge
    348
    Hallo Fredred
    bin gerade am I2C dran und versuche mein Glück. Das Multi.. habe ich nicht vergessen. Werde auch versuchen es dort einzusetzen. Aber erst mal den Bus begreiffen und alles in c
    achim
    PS. Bei dir steht Lutherstadt, komme aus BBG

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    75
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo Fred !
    Ich sage jeder sollte damit programmieren, womit er am besten vorankommt, was ihm liegt und was den Anforderungen genügt!
    Das ist wie beim Autokauf jeder mag nicht immer ne andere Automarke und hat Negatives zu berichten, aber er mag die Marke seines eigenen Autos oft als Beste darzustellen...

    Ich habe am C64 mit Basi und ASM angefangen und durfte beruflich über Pascal, C,C++, Java, Delphi und was weiss ich noch alles gehen...nun nutze ich das mit was ich gut klar komme : "C" und gut ist's ..

    Der eine hat Bascom, der andere C oder ASM..schliesslich machen die Compiler sowieso Maschienencode daraus..

    Wenn man Bascom versteht kann man auch von Bascom vieles umschreiben in C,
    Bascom erleichter aber hin und wieder viel Tipparbeit, so hat alles Vor- und Nachteile.

    Aber trotzdem weiss ich immer noch nicht was ich mir in sachen BAS da ansehen soll..hab irgendwie heut Brett vorm Kopp

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Guten Tag Gerhard,

    wollte doch auf keinen Fall, irgend eine Programmiersprache, als gut oder schlecht beurteilen.
    In meiner Antwort wollte ich nur beschreiben warum ich Bascom nutze.

    Hatte mein Code Zentrale_Test.bas ungekürzt veröffentlicht, da auch Lösungen für ( DCF77, 1wire,Touch, 2Controller mit UART verbinden und Lösungen für I2C –Bus auch eine LCD hängt daran) als eigenständige Gosubs. Wie zum Beispiel 2 PCF8574 der eine als Eingang der andere in Abhängigkeit als Ausgang.

    Hier ein Ausschnitt:

    'Slaveadressen für Porterweiterung LCD
    Const Pcf8574_lcd = &H70 '&B01110000 Dez = 112
    'Slaveadressen für Porterweiterung D1
    Const Bus_d1 = &H72 '&B01110010 Dez = 114
    'Slaveadressen für Porterweiterung D2
    Const Bus_d2 = &H74 '&B01110100 Dez = 116
    '==== Adressen Variable zuweisen ====
    Const Taster_schreib_adresse_t = &B01110010 ' ist IC1
    Const Taster_lese_adresse_t = &B01110011
    Const Led_schreib_adresse_t = &B01111000 ' ist IC3
    Const Led_lese_adresse_t = &B01111001


    '----- Beispiel I²C-Bus Ein-und Ausgänge für 2 ICs verknüpfen.----
    ' IC1 = Eingang (Taster) IC3 = Ausgang (LED)
    Ibus_dig:

    I2cstart
    I2cwbyte Taster_schreib_adresse_t
    I2cwbyte &B11111111 ‘saubere Startbedingung
    I2cstop

    I2cstart
    I2cwbyte Taster_lese_adresse_t
    'I2crbyte Tasten , Ack 'lese nochmal ist sicher aber muss nicht sein
    I2crbyte Tasten , Nack
    I2cstop

    '### Abfrage Bit von Tasten_Byte #########
    'das Toggeln ist nur für Doppelabfrage 1x drücken EIN nochml AUS
    'ein Beispiel für Kontakte ist Bit7 vom Tasten-Byte.

    If Tasten.0 <> Alte_tasten.0 Then
    If Tasten.0 = 0 Then 'ist Bit0 vom Byte
    'steigende Flanke
    Toggle Leds.0
    Cls 'alte Anzeige löschen
    Gosub Anzeigen 'gehe zur LCD-Anzeige
    Else
    'fallende Flanke
    End If
    End If

    '-- Abfrage Bit1 vom Byte Tasten ---
    If Tasten.1 <> Alte_tasten.1 Then
    If Tasten.1 = 1 Then
    'steigende Flanke
    Toggle Leds.1
    Cls 'alte Anzeige löschen
    Gosub Anzeigen 'gehe zur LCD-Anzeige
    Else
    'fallende Flanke
    End If
    End If

    '-- Abfrage Bit2 vom Byte Tasten --
    If Tasten.2 <> Alte_tasten.2 Then
    If Tasten.2 = 1 Then
    ' steigende Flanke
    Toggle Leds.2
    Else
    ' Fallende Flanke
    End If
    End If

    '-- Abfrage Bit3 vom Byte Tasten --
    If Tasten.3 <> Alte_tasten.3 Then
    If Tasten.3 = 1 Then
    ' steigende Flanke
    Toggle Leds.3
    Else
    ' Fallende Flanke
    End If
    End If

    '-- Abfrage Bit4 vom Byte Tasten --
    If Tasten.4 <> Alte_tasten.4 Then
    If Tasten.4 = 1 Then
    ' steigende Flanke
    Toggle Leds.4
    Else
    ' Fallende Flanke
    End If
    End If

    '-- Abfrage Bit5 vom Byte Tasten --
    If Tasten.5 <> Alte_tasten.5 Then
    If Tasten.5 = 1 Then
    ' steigende Flanke
    Toggle Leds.5
    Else
    ' Fallende Flanke
    End If
    End If

    '-- Abfrage Bit6 vom Byte Tasten --
    If Tasten.6 <> Alte_tasten.6 Then
    If Tasten.6 = 1 Then
    ' steigende Flanke
    Toggle Leds.6
    Else
    ' Fallende Flanke
    End If
    End If

    '-- Abfrage Bit7 vom Byte Tasten --
    If Tasten.7 = 0 Then
    Print "habe EIN geschalten" 'Pin auf GND
    Else
    Print "habe AUS geschalten" 'Pin auf Vcc oder offen (liegen ja int. auf H)
    End If

    '----------letzen Tastendruck merken----------
    Alte_tasten = Tasten
    '--- Tastendruck an LED weitergeben-----------
    I2cstart
    I2cwbyte Led_schreib_adresse_t
    I2cwbyte Leds
    I2cstop
    '--- Tastendruck an Anzeige-Modus weitergeben--
    Lcd_aktualisieren = Leds
    Gosub Anzeigen
    Return

    Gruß
    Fred

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    14.11.2013
    Ort
    Home
    Beiträge
    213
    Hollo,
    Völlig OK erklärt. Deshalb sind ja auch die zwei Widerstände von SCL und SDA auf H ein muss.

    Gruß

    - - - Aktualisiert - - -

    Natürlich das wichtigste Vergessen warum BASCOM.
    Im „Programmkopf“ diese Lib schreiben.
    Schaust du dich diese Lib mit Editor an, wirst du mich vielleicht verstehen warum ich diese Programmiersprache bevorzuge.

    '--------- I²C Bustreiber laden -----------
    Enable Interrupts 'alle Interrupts sind aktiv
    'für Hardware TWI interne Software einbinden
    $lib "i2c_twi.lbx"
    Config Twi = 100000 'Bus-Takt = 100kHz

    Mit völlig OK . Ist die Antwort von Robo

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    75
    Beiträge
    1.175
    Blog-Einträge
    1
    Danke für den Nachtrag, ich glaube das ich weiter in C (um)schreibe...ich habe zwar die Bascom Demo aber die ist bei grossen Sachen nicht einsetzbar. Für das Bis'chen , was ich mal ich mal in Bascom probiere reicht es immer noch...
    Ich habe auch in Bascom angefangen in Sachen AVR , nachdem ich mir das dicke Bascom Buch von K.Kühnel gekauft hatte.
    Seit dem Einsatz von auch Arduinos mache ich fast ausschliesslich C...

    Ich denke ich werde das auch noch hinbekommen..mache erst mal in der RF Sache weiter, um den "Geist" nicht nur einspurig laufen zu lassen..

    Schönen Sonntag allen

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Ähnliche Themen

  1. LP2950 3,3V macht Probleme
    Von Kampi im Forum Elektronik
    Antworten: 17
    Letzter Beitrag: 13.12.2011, 08:22
  2. Bootloader macht Probleme
    Von H3llGhost im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 25.02.2008, 15:19
  3. timerhandler macht probleme
    Von crishy im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 06.07.2005, 12:03
  4. PBrenner macht Probleme
    Von Simon1990 im Forum PIC Controller
    Antworten: 0
    Letzter Beitrag: 14.06.2005, 17:47
  5. INT3 macht probleme
    Von Apollo im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 21.05.2005, 18:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress