Hi inka,
du bist ja wirklich hartnäckig da dran!
Wenn ich dein Projekt von Anfang an sehe, dann könnte/sollte daraus sicher mal ein RN-Wissen-Artikel werden.
Hi inka,
du bist ja wirklich hartnäckig da dran!
Wenn ich dein Projekt von Anfang an sehe, dann könnte/sollte daraus sicher mal ein RN-Wissen-Artikel werden.
Gruß
Dirk
hi Dirk,
zielstrebig ja, ich will ja schließlich eine ladestation - die auch gefunden wird - bauen...
schon wieder taucht eine frage auf:
ich dachte, ich könnte auf die gleiche art und weise die frequenz der zweiten schaltung (blinker) messen wie bei der ersten - zwischen dem anschluss 3 des zweiten ne555 und zwischen masse. Dort kann ich aber nur sehen wie die spannung zwischen 2 und 4 volt wechselt, kann ich so nicht die blinkfrequenz sehen und einstellen?
gruß inka
Hi inka,
Dem Oszilloskop ist die Höhe der Spannung ja egal. Da müßtest du doch die Frequenz messen können.Dort kann ich aber nur sehen wie die spannung zwischen 2 und 4 volt wechselt, kann ich so nicht die blinkfrequenz sehen und einstellen?
Für die Verbindung mit der 1. Schaltung würde ich aber noch einen Transistor-Treiber (wie Q1 in der 1. Schaltung) dranbauen. Da der Transistor nicht viel leisten muss, genügt ein NPN-Universaltyp.
Gruß
Dirk
hallo,
inzwischen bin ich durch die verkleinerung des basiswiderstandes R13 von 4,7k auf 3,2k auf einer reichweite der bake von 3 metern angekommen, wohlgemerkt bei (noch) auf niedrigerer temperatur arbeitendem Q2, nach ca. 1 minute wird es schlechter...
jetzt möchte ich außer der reaktion auf dem LCD eine andere reaktion sehen und es klappt nicht:
mit dem aufruf dieser Funktion aus der while schleife (siehe weiter unten):
while-schleife:Code:void read_IR_value(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30 I2CTWI_readBytes(I2C_RP6_BASE_ADR, ir_value, 1); }werden die werte der variablen "ir_value", also 0 oder 4 je nachdem ob bake "gesehen" wird oder nicht auf dem LCD ausgegeben.Code:while(true) { read_IR_value(); clearLCD(); setCursorPosLCD(0, 0); writeStringLCD_P("dez: "); setCursorPosLCD(0, 13); writeIntegerLengthLCD(ir_value[0], DEC, 4); setCursorPosLCD(1, 0); writeStringLCD_P("bin: "); setCursorPosLCD(1, 8); writeIntegerLengthLCD(ir_value[0], BIN, 8); setCursorPosLCD(2, 0); writeStringLCD_P("hex: "); setCursorPosLCD(2, 8); writeIntegerLengthLCD(ir_value[0], HEX, 4); /* if (ir_value[0] = 0) { sound(180,80,25); setLEDs(0b1000); sound(220,80,25); mSleep(500); } */ readAllRegisters(); } return 0;
die if abfrage (hier auskommentiert) der variablen "ir_value" habe ich (bei abgeschalteter bake) mit den werten 1 bis 4 probeweise ausgeführt, die reaktion erfolgt richtig, es piepst. Frage ich nach dem wert "0", passiert nichts, auch bei eingeschalteter bake und auf dem display erscheinendem wert "0"
ich verstehe es einfach nicht. Frage ich die falsche variable ab? Oder nach falschen werten? Oder sind die abfrageabstände zu kurz? kann der beeper nicht so schnell reagieren?
Geändert von inka (19.12.2013 um 16:54 Uhr)
gruß inka
Hi inka,
3 Sachen:
1. Die Abfrage if (ir_value[0] = 0) ergibt nie das gewünschte Ergebnis, aber if (ir_value[0] == 0) würde helfen.
2. Die Abfragefrequenz sollte man auch reduzieren, z.B. mit einer Stopwatch. 250 bis 500ms sind sicher ausreichend. Immerhin muss auch noch die I2C-Kommunikation zwischen RP6 und M32 erfolgen: Das braucht Zeit.
3. ir_value[0] ist ein Feld-Variable. Wo wird die gefüllt?
Gruß
Dirk
hi Dirk,
zumindest der punkt 1 hätte mir auffallen müssen...- jetzt reagiert die abfrage auf das empfangen des IR-signals...
die verzögerung habe ich mit "mSleep(500)" gemacht , das ist wohl blockierend - wenn ich es richtig in erinnerung habe - stört das hier?
oh, ich dachte das passiert hier
ist das nicht so?Code:void read_IR_value(void) { I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30 I2CTWI_readBytes(I2C_RP6_BASE_ADR, ir_value, 1); }
ansonsten ist sie in der programmdatei so:
deklariert...Code:uint8_t ir_value[1];
gruß inka
Lesezeichen