- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 23

Thema: RP6 Slave und M32 Slave

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    So
    Soweit hat alles geklappt!!! Ich sende die Daten mit dem unteren Code.
    Nur die I/Os der Base fehlen noch, die wusste ich nicht, wie ich die ordentlich einbinden soll.
    Vielleicht gibts da noch nen Tip von Euch?!?

    Code:
    void printSensors(void)
    {    
        if(sendData)
        {
            StartDataFrame();
            
            if(HasRP6)
            {                
                writeString_P("Bat:");
                writeInteger(adcBat, DEC);
                writeString_P("\n");
    
                writeString_P("SpeedL:");
                writeInteger(mleft_speed, DEC);
                writeString_P("\n");
                
                writeString_P("SpeedR:");
                writeInteger(mright_speed, DEC);
                writeString_P("\n");
                
                writeString_P("PowerL:");
                writeInteger(adcMotorCurrentLeft, DEC);
                writeString_P("\n");
                
                writeString_P("PowerR:");
                writeInteger(adcMotorCurrentRight, DEC);
                writeString_P("\n");        
            
                writeString_P("LightL:");
                writeInteger(adcLSL, DEC);
                writeString_P("\n");
                
                writeString_P("LightR:");
                writeInteger(adcLSR, DEC);
                writeString_P("\n");
                
                writeString_P("BumpL:");
                writeInteger(bumper_left, DEC);
                writeString_P("\n");
                
                writeString_P("BumpR:");
                writeInteger(bumper_right, DEC);
                writeString_P("\n");
                
                writeString_P("ObsL:");
                writeInteger(obstacle_left, DEC);
                writeString_P("\n");
                
                writeString_P("ObsR:");
                writeInteger(obstacle_right, DEC);
                writeString_P("\n");
                
                writeString_P("ADC0_Base:");
                writeInteger(adc0, DEC);
                writeString_P("\n");
                
                writeString_P("ADC1_Base:");
                writeInteger(adc1, DEC);
                writeString_P("\n");
                
                writeString_P("ADC2_M32:");
                writeInteger(ADC_2, DEC);
                writeString_P("\n");
                
                writeString_P("ADC3_M32:");
                writeInteger(ADC_3, DEC);
                writeString_P("\n");
                
                writeString_P("ADC4_M32:");
                writeInteger(ADC_4, DEC);
                writeString_P("\n");
                
                writeString_P("ADC5_M32:");
                writeInteger(ADC_5, DEC);
                writeString_P("\n");
                
                writeString_P("ADC6_M32:");
                writeInteger(ADC_6, DEC);
                writeString_P("\n");
                
                writeString_P("ADC7_M32:");
                writeInteger(ADC_7, DEC);
                writeString_P("\n");
                
            }
            
            if(HasSRF02)
            {
                writeString_P("Distance:");
                writeInteger(SRF02_Dist, DEC);
                writeString_P("\n");
            }
    
            if(HasM32)
            {
                writeString_P("Mic:");
                writeInteger(getMicrophonePeak(),DEC);
                writeString_P("\n");
            }    
            EndDataFrame();
        }    
    }
    Und noch eine Sache: Habe gerade die Daten mit hterm angesehen. Zum Die ADCs der M32 sind momentan LEER, da hängt nichts dran, ebenso der ADC1 der Base. Am ADC0 der Base ist ein Sharp-Abstandsmodul.
    Das seltsame: Die Werte, die ich für die ADCs 2 bis 7 der M32 erhalte entsprechen je ihrer Nummer, der ADC1 der Base ist immer gleich mit dem ADC0 der Base:

    Code:
    ADC0_Base:82<\n>ADC1_Base:83<\n>ADC2_M32:2<\n>ADC3_M32:3<\n>ADC4_M32:4<\n>ADC5_M32:5<\n>ADC6_M32:6<\n>ADC7_M32:7
    Stimmt da was nicht?

    Grüße

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Zu den I/Os:
    Wenn du die RP6Control_I2CMasterLib verwendest, werden ja die Register 27..29 nicht gelesen.
    Du könntest das Register 29 über I2C allein in ein Byte einlesen und mit writeInteger(Byte, BIN); binär anzeigen. Dann müßten die I/O-Zustände (1/0) der Bumper bzw. I/O1..4 gut erkennbar sein.

    ADC0/1 der Base:
    Probier mal, ADC1 der Base auf GND oder +5V zu legen. Dann müßte der Wert 0 bzw. 1023 richtig angezeigt werden.
    Gruß
    Dirk

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Du meinst den Teil "void getAllSensors(void)", oder?
    Dort müsste ich dann die beiden I/Os, die ich als Eingänge haben möchte, anfügen.
    Die meisten ADCs werden dort in zwei Buffereinträge geschrieben. (Warum?)
    Aber wie genau meinst du das mit "allein in ein Byte"?
    Meinst du sowas wie "InOut=sensorBuf[29]"? Dort steht ja dann so was wie 0100 (LED 2 an) !?
    Wenns so ist, dann ists einfach.

    Zu Den ADCs der M32: Sie zeigen wieder nur ihre nummer an, auch bei +5V oder Gnd am ADC.
    Aber ich finde den Fehler grad nicht, Code siehe oben, mein letzter Beitrag, die untersten "writeString"-Einträge
    Das Ergebnis ist das gleiche, wenn ich im oberen Code folgendes eingebe:

    writeString_P("ADC2_M32:");
    writeInteger(readADC(2), DEC);
    writeString_P("\n");

    usw für die anderen ADCs.

    Grüße
    Geändert von fabqu (25.09.2011 um 21:49 Uhr)

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    164
    Zitat Zitat von fabqu Beitrag anzeigen
    Die meisten ADCs werden dort in zwei Buffereinträge geschrieben. (Warum?)
    Die ADCs werden mit 10 Bit aufgelöst - d.h.: Du hast zwischen min- und max-Wert (0V und 5V) 1024 Abstufungen. 10 Bit passen aber nicht in eine 8-Bit-Variable, deshalb werden zwei 8-Bit-Variablen (bzw. ein 2-Byte-Variable) dafür vorgesehen.

    viele Grüße
    Andreas
    #define true ('/'/'/')
    #define false ('-'-'-')

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Aber wie genau meinst du das mit "allein in ein Byte"? Meinst du sowas wie "InOut=sensorBuf[29]"?
    Wenn du die RP6Control_I2CMasterLib verändern willst, könntest du die Funktion getAllSensors() so ändern:
    Code:
    void getAllSensors(void)
    {
     I2CTWI_readRegisters(I2C_RP6_BASE_ADR, I2C_REG_POWER_LEFT, sensorBuf, 27);
     mleft_power = sensorBuf[0];
     mright_power = sensorBuf[1];
     mleft_speed = sensorBuf[2];
     mright_speed = sensorBuf[3];
     mleft_des_speed = sensorBuf[4];
     mright_des_speed = sensorBuf[5];
     mleft_dist = sensorBuf[6] + (sensorBuf[7]<<8);
     mright_dist = sensorBuf[8] + (sensorBuf[9]<<8);
     adcLSL = sensorBuf[10] + (sensorBuf[11]<<8);
     adcLSR = sensorBuf[12] + (sensorBuf[13]<<8);
     adcMotorCurrentLeft = sensorBuf[14] + (sensorBuf[15]<<8);
     adcMotorCurrentRight = sensorBuf[16] + (sensorBuf[17]<<8);
     adcBat = sensorBuf[18] + (sensorBuf[19]<<8);
     adc0 = sensorBuf[20] + (sensorBuf[21]<<8);
     adc1 = sensorBuf[22] + (sensorBuf[23]<<8);
     leds = sensorBuf[26];
    }
    Dann stehen die I/Os in der Variablen leds (global als uint8_t definieren!).

    Dort steht ja dann so was wie 0100 (LED 2 an) !?
    Genau.
    Gruß
    Dirk

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Danke dir.
    Er kompiliert zwar, bringt aber folgenden Fehler:
    [code]Compiling: ../../Library/RP6control/RP6Control_I2CMasterLib.c
    avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../../Library/RP6control/RP6Control_I2CMasterLib.lst -I../../Library -I../../Library/RP6control -I../../Library/RP6common -std=gnu99 -MD -MP -MF .dep/RP6Control_I2CMasterLib.o.d ../../Library/RP6control/RP6Control_I2CMasterLib.c -o ../../Library/RP6control/RP6Control_I2CMasterLib.o
    ../../Library/RP6control/RP6Control_I2CMasterLib.c: In function 'getAllSensors':
    ../../Library/RP6control/RP6Control_I2CMasterLib.c:172: warning: array subscript is above array bounds[\code]


    Was kann ich denn gegen das ADC-Problem auf der M32 machen?
    Wie schreibe ich deren Werte in zwei Buffer?

    Grüße

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    uint8_t sensorBuf[24];

    sensorBuf[] ist nicht groß genug für leds = sensorBuf[26];
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Slave Transmitter und Slave Receiver Mode
    Von masasibe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 26.02.2011, 19:55
  2. I2C Slave
    Von Jada im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 19.06.2010, 11:47
  3. Slave-Master-Slave übertragung geht nicht
    Von Dämmi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 16
    Letzter Beitrag: 26.11.2008, 00:08
  4. I2C-Slave
    Von liggi im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 02.01.2008, 16:02
  5. Pic als Slave am I2C
    Von kalletronic im Forum PIC Controller
    Antworten: 4
    Letzter Beitrag: 04.08.2006, 19:46

Berechtigungen

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

LiFePO4 Speicher Test