- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
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 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 ('-'-'-')

  2. #2
    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

  3. #3
    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

  4. #4
    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!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    ahh, klar. Danke !!!
    Das hab ich Vergessen

    Und die ADC-Sache?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hi!
    Ich möchte gerade die ADCs der M128 via BT senden.
    Habe dafür folgendes im Manual gefunden:
    Code:
    Syntax
    word ADC_Set(byte v_ref,byte channel);
    Sub ADC_Set(v_ref As Byte,channel As Byte) As Word
    Beschreibung
    Die Funktion ADC_Set initialisiert den Analog-Digital_Wandler. Die Referenzspannung und der Messkanal
    werden ausgewählt, und der A/D Wandler für die Messungen vorbereitet. Der Meßwert wird danach mit
    ADC_Read() ausgelesen.
    Parameter
    channel Portnummer (0..7) des ADC (Port A.0 bis A.7 bei Mega32, Port F.0 bis F.7 bei
    Mega128)
    v_ref Referenzspannung (siehe Tabelle)
    Ich mache das mit Fabian E.'s Code:
    Code:
                  print("Bat:");
                  printInteger(adcBat);
                  print("\n");
                  oldBat = adcBat;
    Daher, denke ich, muss es dann folgendermaßen aussehen:
    Code:
                  ADC_Set(ADC_VREF_VCC,0)
                  print("ADC0_M128:");
                  printInteger(ADC_Read(void));
                  print("\n");
    Leider kommt da nix bei mir an...

    Vg,
    Fabian

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Was ist "nix"? Null?
    Was hast du an PF0 (ADC-Stecker Pin 4) angeschlossen?
    Gruß
    Dirk

Ä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
  •  

fchao-Sinus-Wechselrichter AliExpress