- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Projekt PCF8591

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2009
    Beiträge
    16

    Projekt PCF8591

    Anzeige

    Praxistest und DIY Projekte
    Hallo ich habe auf der "asurowiki" Seite ein paar Informationen zu der Analogen Porterweiterung gefunden und wollte hier mal anfragen was das Unterprogramm, welches auf der genannten Seite steht zurückgibt? Von welchem Eingang gibt mir dieses Programm die Daten?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Die Funktion read_pcf8591_adc erwartet als Parameter den A/D Kanal (0..3) und gibt den entsprechenden A/D Wert zurück.

    Hier noch der Link zur Schaltung und zum Programm:
    http://www.asurowiki.de/pmwiki/pmwik...orterweiterung

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2009
    Beiträge
    16
    Ok das hilft mir schon mal weiter. Aber ich bekomme immer Fehlermeldungen beim erstellen meiner Datei.

    Code:
    >Session Environment Variables:
    AF_AVRDIR=C:\WinAVR
    AF_PROJECT=test
    AF_SOURCE_FILES=test.c i2c.c
    AF_ASM_SRC_FILES=
    AF_PRGDIR=C:\Programme\AsuroFlash
    AF_PRJDIR=C:\AsuroFlash\asuro-lib\examples\US
    AF_ASURO_LIB_PATH=C:\AsuroFlash\asuro-lib\lib
    File test.c saved.
    >Default make_all.cmd file created.
    >Default makefile created.
    Make
    C:\AsuroFlash\asuro-lib\examples\US>C:\WinAVR\utils\bin\make.exe all 
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst -IC:\Programme\AsuroFlash\include test.c \
    	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
    	[ -s test.d ] || rm -f test.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (WinAVR 20090313) 4.3.2
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    Size before:
    test.elf  :
    section           size      addr
    .text              714         0
    .bss                17   8388704
    .stab              888         0
    .stabstr            95         0
    .debug_aranges     128         0
    .debug_pubnames    335         0
    .debug_info       1165         0
    .debug_abbrev      592         0
    .debug_line       1025         0
    .debug_frame       240         0
    .debug_str         502         0
    .debug_loc         106         0
    Total             5807
    
    
    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst -IC:\Programme\AsuroFlash\include test.c -o test.o
    test.c: In function 'read_pcf8591_adc':
    test.c:12: warning: passing argument 1 of 'StartI2C' makes integer from pointer without a cast
    test.c:18: warning: passing argument 1 of 'StartI2C' makes integer from pointer without a cast
    test.c: In function 'main':
    test.c:42: warning: passing argument 1 of 'SerWrite' makes pointer from integer without a cast
    avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o -IC:\Programme\AsuroFlash\include test.o i2c.o  --output test.elf -Wl,-Map=test.map,--cref -IC:\Programme\AsuroFlash\lib -lm
    test.o: In function `read_pcf8591_adc':
    C:\AsuroFlash\asuro-lib\examples\US/test.c:17: undefined reference to `Sleep'
    test.o: In function `main':
    C:\AsuroFlash\asuro-lib\examples\US/test.c:35: undefined reference to `Init'
    C:\AsuroFlash\asuro-lib\examples\US/test.c:37: undefined reference to `FrontLED'
    C:\AsuroFlash\asuro-lib\examples\US/test.c:42: undefined reference to `SerWrite'
    make: *** [test.elf] Error 1
    
    ExitCode 2
    >Ready.

    Hier mal das Programm. Es soll den Wert von dem ersten Eingang vom PCF8591 über die serielle Schnittstelle senden.
    Code:
    #include "asuro.h"
    #include "i2c.h"
    #define pcf8591_address 0x90           // I2C Adresse des PCF8574
    
    
    //liest einen ADC Wert vom PCF8591
    unsigned char read_pcf8591_adc(unsigned char adc)
    {
        unsigned char ret;
        unsigned char byte = 0;
    
        ret = StartI2C(pcf8591_address+WriteI2C);  // Sende Start Condition
        if (ret == 0)
    
        ret = WriteI2C(adc);                // Senden des Control Bytes startet die A/D Wandlung
          StopI2C();                            // Sende Stop Condition, Bus freigeben
        Sleep(10);                             // Warten bis A/D Wandlung benedet (mind. 90µs)
        ret = StartI2C(pcf8591_address+ReadI2C);  // Sende Start Condition
    
        if (ret == 0)
        {
           // Mehrmaliges Lesen um alte A/D Werte zu ignorieren
           byte = ReadI2C(1);      // Lese Byte + acknowledge
           byte = ReadI2C(0);      // Lese Byte + no acknowledge
        }
        else ret = 3;
        StopI2C();                           // Sende Stop Condition, Bus freigeben
        return byte;
    }
    
    int main(void)                  
    {
        unsigned char rled;
        unsigned char port;
        Init();
        InitI2C();
        FrontLED(ON);
        while(1)
        {
        port=0;
        rled = read_pcf8591_adc(port);
        SerWrite(rled,4);
         }
        return 0;
    }

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Da fehlt zumindest noch die asuro.c in deinem Projekt. Die Asuro-Lib selbst scheint aber auch zu fehlen. Eigentlich sollte das schon durch das Makefile Template vom AsuroFlash Tool eingebunden werden.
    Das ist seltsam, hast du die Templates geändert? Welche AsuroFlash Version verwendest du?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2009
    Beiträge
    16
    Ich verwende die Version 1.4.6.56. Ich habe jetzt nochmal etwas geändert und bekomme aber folgende Fehlermeldung
    Code:
    >Session Environment Variables:
    AF_AVRDIR=C:\WinAVR
    AF_PROJECT=Project1
    AF_SOURCE_FILES=test.c
    AF_ASM_SRC_FILES=
    AF_PRGDIR=C:\Programme\AsuroFlash
    AF_PRJDIR=C:\ASURO_SRC\programm\us
    AF_ASURO_LIB_PATH=C:\ASURO_SRC\AsuroLib\lib
    File test.c saved.
    >Default make_all.cmd file created.
    >Default makefile created.
    Make
    C:\ASURO_SRC\programm\us>C:\WinAVR\utils\bin\make.exe all 
    set -e; avr-gcc -MM -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=i2c.lst i2c.c \
    	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > i2c.d; \
    	[ -s i2c.d ] || rm -f i2c.d
    set -e; avr-gcc -MM -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c \
    	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > asuro.d; \
    	[ -s asuro.d ] || rm -f asuro.d
    set -e; avr-gcc -MM -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
    	| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
    	[ -s test.d ] || rm -f test.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (WinAVR 20090313) 4.3.2
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c: In function 'read_pcf8591_adc':
    test.c:12: warning: passing argument 1 of 'StartI2C' makes integer from pointer without a cast
    test.c:18: warning: passing argument 1 of 'StartI2C' makes integer from pointer without a cast
    test.c: In function 'main':
    test.c:42: warning: passing argument 1 of 'SerWrite' makes pointer from integer without a cast
    avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c -o asuro.o
    avr-gcc -c -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=i2c.lst i2c.c -o i2c.o
    avr-gcc -mmcu=atmega8 -DF_CPU=8000000UL -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o i2c.o   --output test.elf -Wl,-Map=test.map,--cref -L../../lib -lm -lasuro
    c:/winavr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: cannot find -lasuro
    make: *** [test.elf] Error 1
    
    ExitCode 2
    >Ready.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2009
    Beiträge
    16
    ok hab den Fehler selbst gefunden.

    Muss ich an die SDA und SCL Leitung einen Widerstand anschließen?
    Laut I2C Spezifikation ist dies doch notwendig?
    Weil laut Plan der oben genanten Seite muss man nichts anschließen. Und in dem Video funktioniert diese Schaltung ja. Oder wurde da etwas auf der Hauptplatine geändert?

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.059
    An die SCL und SDA Leitungen müssen Widerstände sein. Oft verwendet man die internen Pullupwiderstände des µC. Für höhere Frequenzen bzw längere Leitungen sollte man aber externe Widerstände verwenden.

    MfG Hannes

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2009
    Beiträge
    16
    So wenn ich die Bauteile zur Linienverfolgung an die analogen Eingänge des PCF8591 anschliese benötige ich ja auch wieder Pulldown Widerstände. Sollte ich da die gleichen verwenden wie original( 20k Ohm) oder sind da auch andere möglich?

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Du solltest schon die gleivhen Widerstände verwenden.
    Stimmt, in der Schaltung fehlen die I2C PullUp Widerstände (4,7k nach VCC)

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    28.08.2009
    Beiträge
    16
    So habe alles aufgebaut. Aber es will einfach nicht funktionieren. Ich habe den rechten Liniensensor auf den ersten und den linken Sensor auf den zweiten Eingang gelegt, aber ich bekomme keinen vernünftigen Werte über mein Programm. Ich habe mit einem Multimeter nachgemessen und habe festgestellt das sich die Spannung am den Eingängen ändert. Hat jemand ne idee wie ich die Werte in mein Programm bekomme?

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress