www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN-BUS Speedsignal -> Analog Rechtecksignal


Autor: Hermy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,
ich hoffe, Ihr könnt mir weiterhelfen.

Ich bin grad dabei eine Routine zu schreiben, welche das Speedsignal aus 
dem CAN-BUS raus filtert und in Rechtecksignale für ne Navi umwandelt.

Das funktioniert auch soweit in den Grundzügen, allerdings viel zu 
ungenau.

Mein größtes Problem ist, das die Impulse "nachziehen", also wenn das 
Auto hält gibt das Modul noch ein paar Impulse raus und man kann sehen, 
wie das Navi langsam weiter läuft, obwohl das Auto steht, nach ca. 1Sek. 
springt das Navi an die reale Stelle zurück.


hier mal die Routine für die Impulswandlung:
void speedimpuls(unsigned int hi, unsigned int low)
{
  double impuls;
  double i;

  impuls = hi + low;
  if (impuls == 0) return;

  impuls = (hi * 256) + low;
  impuls = impuls / 80;

  for (i=820; i>=impuls; i--);

  PORTB |= (1<<SPEEDIMP);
  for (i=0; i<200; i++);
  PORTB &= ~(1<<SPEEDIMP);

}
hi = Hoher Bytewert
low = kleiner Bytewert

Hoffe, mir kann einer weiterhelfen oder ein Beispielcode, link oder 
ähnliches geben, womit ich weiter komme.

Gruß
Hermy

Autor: opacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre es nicht einfacher direkt an den Radsensor zu gehen bzw. an den 
Impuls der ins ABS geht?

Autor: Hermy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von der Idee her schon, aber dann müsste extra ein Kabel vom Motorraum 
ins innere gelegt werden.
Ausserdem ist es viel eleganter und interessanter den Speedpuls über den 
Innenraum-Can rauszufiltern :)

Autor: opacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann geb doch wenn du die Geschwindigkeit im µC hast, das ganze über PWM 
aus .. Was erwartet das Navi denn für einen Impuls?

Gibt das Modul denn wirklich noch 1 sekunde daten aus oder denkst du das 
weil das Navi weiterläuft?

Autor: Hermy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das muss ein rechtecksignal sein, wo die frequenz mit steigender 
geschwindigkeit ebenfalls steigt

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt nicht viel Zeit.

Welches Auto?

http://www.martinsuniverse.de/projekte/navicaninte...

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, wäre schon interessant, welches Auto, welcher Can-Bus.
Neben dem Geschwindigkeitssignal gibts auch Wegstreckenimpulse.
Falls es passt:
ID 0x351
Byte0 vorwärts/Rückwärts
Byte1/2 Geschwindigkeit
Byte3/4 Wegstreckenimpulse

Autor: Hermy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Martin,

sieht super aus, dein Projekt.
Leider finde ich keinen Link zur Software.

Kannst mir den Link schicken? Damit werde ich sicher schon sehr viel 
weiter kommen.
Auto isn AlfaRomeo aber da isses ja egal ob für Audi oder Alfa, müssen 
ja nur die entsprechende ID und die abzufragenden Bytes angepasst 
werden.

MfG
Hermy

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weißt aber nicht unbedingt, wie du die geschwindigkeit in die Impulse 
umrechnest.

Sourcecode findest du jetzt auf meiner Seite. Ich glaube gut kommentiert 
hatte ich ihn damals nicht. Wenn du Fragen hast kannst du gerne Fragen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn das für ein Navigationsgerät? So ein TomTom, Navigon oder 
Garmin PNA?

Gruß.

Autor: Hermy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Martin,

vielen Dank für den Source, nun muss ich mich erstma durch asm durch 
wühlen, da ich vorher nur über c gecodet hab. Ich finde der code is 
recht gut kommentiert.
Die Umrechnung der Geschwindigkeit in Impulse muss nicht 100% stimmen, 
sie muss nur gleichmäßig mit der geschwindigkeit steigen und fallen. Die 
Navi kallibriert sich selbst anhand der Impulse und des 
Positionswechsels übers GPS-Signal.
@Gast: Die Navi ist eine Pioneer HD3BT.

Autor: Hermy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Martin,

irgendwie blicke ich nicht so ganz durch...

ist das der komplette Source?
Ich finde keine ID's oder Stellen, die er abfragt, nach der Art, "Wenn 
die ID mit dem Byte, dann mach was..."
Hab auch nichts mit "out" gefunden, also da spielt sich irgendwie alles 
in den Registern ab.

Oder es hängt mit meiner (noch) Unwissenheit von asm zusammen ;)

Kannst mir ein paar Tips geben?

Gruß
Hermy

Autor: Hermy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso, ich arbeite mit nem AtMega162 + SJA1000.

Hardwarestruktur is ähnlich der vom CANDIP Modul.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unter dem Label "MsjObj0_ini:" wird die ID der Message festgelegt. Immer 
wenn eine Msg mit dieser ID empfangen wird, wird ein Interrupt ausgelöst 
(ISR "CANService:") . In der ISR werden die Daten der Msg zu erst 
geprüft, und dann weiter verarbeitet.

Wenn du magst, kannst du auch in meinem Forum ( 
http://stronix.kilu.de/forum/ ) Fragen. Im Augenblich ist da noch nicht 
viel los, aber vielleicht wirds ja noch was ;-) .

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.