Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - borg

Pages: [1] 2 3 ... 205
1
Hardware / Re: Issues beim DC-Brick
« on: May 20, 2019, 16:44:37 »
Das Analog Out Bricklet kann nur bis zu der Spannung ausgeben die eingespeist wird. Dabei kann zur Einspeisung auch die intern im System vorhandenen 5V nutzen.

Zum Video: Ich mache im Laufe der Woche wenn ich dazu komme nochmal ein Video wo ich den Trigger auf das Eingangs-PWM Signal auf einem anderen Kanal setze, dann kannst du genau sehen was mit der Waveform passiert und das Verhalten macht dann auch mehr Sinn.

2
Hardware / Re: Issues beim DC-Brick
« on: May 15, 2019, 13:44:45 »
Ich hab mir das genauer angeschaut. Das was du da siehst ist die "output constant-off time", siehe Seite 8 im Datenblatt: https://www.nxp.com/docs/en/data-sheet/MC33926.pdf

Diese beträgt ~20us. Bei einer Frequenz von 15kHz bei einem Velocity-Wert von ~28000 hast du eine Off-Time von 20us. Das passt also genau.

Was du jetzt machen kannst ist die PWM Frequenz verringern. Bei einer PWM Frequenz von 1500Hz erreicht du die 20us erst bei einer Velocity von ~32000.

Das gleiche gilt natürlich symmetrisch auch für den 0-Bereich.

Ich hab mal zwei Videos gemacht:
* 15000Hz: https://gfycat.com/unsungfilthyhalibut
* 1500Hz: https://gfycat.com/oldtiredcobra

Da kannst du gut sehen, dass bei der 15kHz Version die 20us "off-time" einen größeren Prozentanteil des Duty Cycle ausmacht.

3
Sorry für die späte Antwort, ich hatte den Post irgendwie übersehen.

Das abgeänderte Beispiel könnte so aussehen:

Code: [Select]
import com.tinkerforge.IPConnection;
import com.tinkerforge.BrickletNFC;

public class ExampleScanForTags {
private static final String HOST = "localhost";
private static final int PORT = 4223;

// Change XYZ to the UID of your NFC Bricklet
private static final String UID = "nfc2";

// Note: To make the example code cleaner we do not handle exceptions. Exceptions
//       you might normally want to catch are described in the documentation
public static void main(String args[]) throws Exception {
IPConnection ipcon = new IPConnection(); // Create IP connection
BrickletNFC nfc = new BrickletNFC(UID, ipcon); // Create device object

ipcon.connect(HOST, PORT); // Connect to brickd
// Don't use device before ipcon is connected

// Add reader state changed listener
nfc.addReaderStateChangedListener(new BrickletNFC.ReaderStateChangedListener() {
public void readerStateChanged(int state, boolean idle) {
if (state == BrickletNFC.READER_STATE_IDLE) {
try {
nfc.readerRequestTagID();
}
catch (Exception e) {
return;
}
}
else if(state == BrickletNFC.READER_STATE_REQUEST_TAG_ID_READY) {
try{
int i = 0;
StringBuilder tag = new StringBuilder();
BrickletNFC.ReaderGetTagID ret = nfc.readerGetTagID();

for (int v : ret.tagID) {
if (i < ret.tagID.length - 1) {
tag.append(String.format("0x%X ", v));
}
else {
tag.append(String.format("0x%X", v));
}

i++;
}

System.out.format("Found tag of type %d with ID [%s]\n", ret.tagType, tag);
nfc.readerRequestTagID();
}
catch (Exception e) {
return;
}
}
else if (state == BrickletNFC.READER_STATE_REQUEST_TAG_ID_ERROR) {
try {
nfc.readerRequestTagID();
}
catch (Exception e) {
return;
}
}
}
});

// Enable reader mode
nfc.setMode(BrickletNFC.MODE_READER);

System.out.println("Press key to exit"); System.in.read();
ipcon.disconnect();
}
}

Im Grunde musst du nur zusehen das in jedem State in dem du landen kannst in dem das NFC Bricklet nicht irgendetwas durchführt oder auf irgendetwas wartet "nfc.readerRequestTagID()" nochmal aufgerufen wird, damit das Bricklet auch durchgängig nach Tags sucht.

4
Es gibt wieder eine neue BSEC-Version die ich noch einbauen muss in die Firmware. Das Changelog ist allerdings nicht vielversprechend, die Berechnung des IAQ Index hat sich nicht geändert.

Ob mit der neuen Version der "load/save state"-Bug gefixt ist weiß ich noch nicht, das muss ich erst noch testen.

5
Hardware / Re: Issues beim DC-Brick
« on: May 15, 2019, 01:03:50 »
Welche Einstellungen verwendest du dafür genau? Ich kann nachschauen ob da gerade an der Stelle ein "prescaler" umspringt oder ähnliches. Eigentlich sollte das aber nicht einen so großen Sprung machen das du es mit einer Glühlampe sehen können solltest.

6
Hardware / Re: Issues beim DC-Brick
« on: May 14, 2019, 13:09:17 »
Der DC Brick gibt ein PWM aus, wobei die "Velocity" die du einstellst dem Duty Cycle des PWMs entspricht. Wie der Motor auf ein spezifisches PWM reagiert hängt vom Motor ab. Die Frequenz wird so ausgegeben wie du sie einstellst (mit der Auflösung die der Microcontroller hat beim erstellen des PWMs).

7
Master Bricks mit Hardware Version >= 2.0 haben die ADC-Kalibrierung in Hardware mit auf der Leiterplatte und sie wird automatisch beim Start ausgeführt.

Das Kalibrieren ist an der Stelle also ohne Funktion. Da muss ich allerdings zugeben, das ist nicht gut dokumentiert, das einzige was ich dazu gefunden hab ist ein Blogeintrag der 6 Jahre alt ist: https://www.tinkerforge.com/de/blog/master-brick-20-and-shielded-bricklet-cables/  :D.

8
Ein Rückgabewert von -1 bedeutet Timeout.

Kannst du nochmal überprüfen ob du wirklich "y6V" als UID eingetragen hast?

9
General Discussion / Re: IMU 2.0 sensor fusion question
« on: May 02, 2019, 15:08:03 »
This is really hard to tell if it will work well, you will probably have to try it out.

The fusion algorithm is part of the IC that we use (Bosch BNO055), the algorithm is unfortunately propitiatory and we don't exactly know how it works.

10
General Discussion / Re: Unable to save calibration
« on: May 02, 2019, 15:06:59 »
If you press the save button the Brick Viewer will save the current values of the calibration on the Brick and it will use them as a starting point when it is started the next time.

This does not mean that every "led" in Brick Viewer will immediately turn green again on next boot. Since from the perspective of the IMU it does not yet have gathered enough data to be sure if it calibrated correctly or not.

The Brick will run the continuous calibration in any way.

11
Also: Der Code in example_simple.c liefert beim Aufruf von rotary_poti_get_position den Wert < 0 , also Fehler.

Welcher Wert < 0 wird denn zurück gegeben?

Wo finde ich die alten C-Bindings, um den schwarzen Peter dem Binding zuzuschustern ;-)

http://download.tinkerforge.com/bindings/c/

12
Anfängerfragen und FAQ / Re: ContinuousAcceleration16BitCallback
« on: April 29, 2019, 14:57:16 »
Mit setConfiguration

14
Anfängerfragen und FAQ / Re: ContinuousAcceleration16BitCallback
« on: April 29, 2019, 13:50:50 »
Anbei ein Beispiel:

Code: [Select]
function matlab_example_continuous_callback()
    import com.tinkerforge.IPConnection;
    import com.tinkerforge.BrickletAccelerometerV2;

    HOST = 'localhost';
    PORT = 4223;
    UID = 'XYZ'; % Change XYZ to the UID of your Accelerometer Bricklet 2.0

    ipcon = IPConnection(); % Create IP connection
    a = handle(BrickletAccelerometerV2(UID, ipcon), 'CallbackProperties'); % Create device object

    ipcon.connect(HOST, PORT); % Connect to brickd
    % Don't use device before ipcon is connected

    % Register acceleration callback to function cb_acceleration
    set(a, 'ContinuousAcceleration16BitCallback', @(h, e) cb_continuous_acceleration(e));

    % Get X, Y and Z axis continuous acceleration with 16-bit resolution
    a.setContinuousAccelerationConfiguration(true, true, true, BrickletAccelerometerV2.RESOLUTION_16BIT);

    input('Press key to exit\n', 's');
    ipcon.disconnect();
end

% Callback function for continuous acceleration callback
function cb_continuous_acceleration(e)
    data_all = [];
    data_axis = [];

    for i = 1:length(e.acceleration)
        if mod(i, 3) ~= 0
            data_axis = [data_axis double(e.acceleration(i)) / 10000.0];
        else
            data_axis = [data_axis double(e.acceleration(i)) / 10000.0];
            data_all = [data_all; data_axis];
            data_axis = [];
        end
    end

    for i = 1:length(data_all)
        data_axis = data_all(i,:);

        for j = 1:length(data_axis)
            if j == 1
                fprintf('Acceleration [X]: %g g\n', data_axis(j));
            elseif j == 2
                fprintf('Acceleration [Y]: %g g\n', data_axis(j));
            else
                fprintf('Acceleration [Z]: %g g\n\n', data_axis(j));
            end
        end
    end

    fprintf('\n');
end

15
Die Bricklets haben eine API die in vielen Programmiersprachen zur Verfügung steht (siehe Doku). Allerdings tauchen die Joystick/Poti Bricklets nicht als Gamecontroller unter Windows auf.

Es müsste also eine Art Treiber geschrieben werden der unsere API nutzt und damit ein "Gamecontroller-Device" unter Windows implementiert. Das ist sicherlich möglich, ich vermute allerdings das es recht viel Aufwand ist.

Pages: [1] 2 3 ... 205