Bei der Schaltung von dem PCF859 kann ich doch den AGND auf Masse legen oder ist das falsch? Ich habe auch die Liniensensoren mit einem Widerstand auf Masse gelegt.
Druckbare Version
Bei der Schaltung von dem PCF859 kann ich doch den AGND auf Masse legen oder ist das falsch? Ich habe auch die Liniensensoren mit einem Widerstand auf Masse gelegt.
So dieses Problem hat sich erledigt und ich stehe vor dem nächsten. Ich habe eines US Satz von Conrad nach den Vorgaben von der Arexx Seite aufgebaut und das Testprogramm aus der neuen Lib auf den ASURO gespielt, aber er gibt mir nur sehr große Zahlwerte wieder (so um die 250) hin und wieder gibt er mir bei kurzen Entfernungen Werte zwischen 1 und 8 wieder. Kann mir da einer helfen? desweiteren bräuchte ich hilfe beim verändern des Chirp Befehls. Er soll nicht mehr den ADC3 abfragen, sondern den dritten Eingang vom PCF859 als Eingang für das US Signal verwenden.
Was war denn nun das Problem?
Das Ultraschallmodul an dem PCF8591 anzuschliessen, wird nicht funktionieren. Der A/D Port wird in diesem Fall als Komparator verwendet. Dieses Fature gibt es nicht beim PCF8591
Es lag an dem Programm vom I2C von der wiki Seite. Da waren die Werte WriteI2C und ReadI2C drin.
ret = StartI2C(pcf8591_address+WriteI2C); // Sende Start Condition
ret = StartI2C(pcf8591_address+ReadI2C); // Sende Start Condition
Diese sind aber Falsch, es muss so aussehen.
ret = StartI2C(pcf8591_address+WRITE);
ret = StartI2C(pcf8591_address+READ);
Ich bekomme aber bei ret immer den Wert 1. Ich habe den Code so geändert, dass er immer auf 0 geht aber das ist ja eigentlich so nicht gedacht. Hier mal der Code:
Kann man das US Modul umbauen, dass dieser einfach eine Spannung wiedergibt, wenn etwas in 10 cm entfernung ist?Code:unsigned char read_pcf8591_adc(unsigned char adc)
{
unsigned char ret;
unsigned char byte = 0;
ret = StartI2C(pcf8591_address+WRITE); // Sende Start Condition
ret=0;
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+READ); // Sende Start Condition
ret=0;
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;
}