Car-PC.info

OnBoard Diagnose (OBD) - Projekt: OBD direkt im FIS / MFA anzeigen (nur VAG 3LB)

ZZottel - Di 29 Dez, 2009 00:15
Titel: Projekt: OBD direkt im FIS / MFA anzeigen (nur VAG 3LB)
Wäre es nicht cool, während der Fahrt ein paar OBD-Messwertblöcke im Blick zu haben? Warum kann man sich sowas nicht auf seinem Kombiinstrument anzeigen lassen, wenn sich dort doch schon ein Display (FIS oder MFA genannt) befindet?

Kurze Antwort: Wenn man will, geht das.

Als nächste "Evolutionsstufe" von meinem Bastelprojekt "FIS-Control" (siehe auch http://www.car-pc.info/phpBB2/viewtopic.php?t=22735 und meine Homepage), möchte ich jetzt das Auslesen von Messwertblöcken per OBD einbauen.

Als Proof-of-Concept kann ich mir schonmal die Initialisierung der KWP1281-Verbindung auf meinem FIS ansehen. Das sieht zwar erstmal unspektakulär aus, wer sich mit dem Thema aber schon etwas beschäftigt hat weiß, dass die größten Hürden damit schon überwunden sind...
MillenChi - Di 29 Dez, 2009 00:50
Titel:
hyper... gleich mal abonieren!!
wenn du nen tester brauchst, sag bescheid!!
Torro - Di 29 Dez, 2009 14:56
Titel:
Also ich würde auch einiges tun, damit mein Display in der Mitte mehr anzeigt...Brauchst du Hilfe, vorausgesetzt ich kann es, las es mich wissen.
Christoph1 - Di 29 Dez, 2009 20:42
Titel:
Jo ist echt ne coole Idee, vom R32-club.de hat jemand so ne MFA Anzeige gebastelt. Bei Kufatec gibts sowas auch, aber mit externen Sensoren.
Aber beim Golf läuft das ja über CAN oder ?

Hier mal nen Bild
http://www.r32-club.de/galerie/albums/userpics/11982/CIMG4003.jpg

Falls du nen Tester brauchst einfach melden Smile
ZZottel - Fr 01 Jan, 2010 16:09
Titel:
Bin wieder einen Schritt weiter. Jetzt kann ich mir schon die Geräteidentifikation anzeigen lassen (hier am Beispiel von meinem Kombiinstrument).
Die OBD-Schnittstelle ist echt pingelig was Timing angeht. Ich hatte auf meinem ATmega32 einen Timer-Interrupt konfiguriert, der alle halbe Sekunde eine Variable setzt. Allein das hat gereicht, damit ich öfter Verbindungsabbrüche hatte.
ZZottel - Sa 02 Jan, 2010 00:32
Titel:
Messwertblöcke gehen jetzt auch. Fehlt eigentlich nur noch Fehlerspeicher anzeigen/löschen.

Am meisten Arbeit dürfte noch das Gestalten einer ordentlichen Menüführung sein. Plan ist, jede der acht Textzeilen konfigurierbar zu machen. Ich will also wählen können, welcher Messwert aus welcher Gruppe in einer Zeile angezeigt wird, oder ob dort ein statischer Text stehen soll.

Im Bild ist der MWB 2 von meinem Kombi zu sehen. Bitte nicht über die "seltsamen" Werte wundern. Das Kombi ist nicht im Fahrzeug verbaut, daher sind praktisch alle Sensorwerte unrealistisch.
MillenChi - Mo 04 Jan, 2010 21:25
Titel:
Klasse!!
Wie siehts mit Ladedruck und Öltemp aus??
Ich hab im FIS ja auch nur noch die oberste Zelle frei.
Klappt das dann auch?
Christoph1 - Di 05 Jan, 2010 00:25
Titel:
Kommt drauf an obs über die OBD ausgeben wird.
Bei meinem A3 1,8T (bj10/2000) wird beides noch nicht über die OBD ausgegeben
Cupra-driver - Di 05 Jan, 2010 08:12
Titel:
Ladedruck wäre eh über OBD schwachsinnig, weil es glaub ich nur jede Sekunde aktualisiert wird. Der richtige Ansatz wäre ein eigener Drucksensor (elektr) in Verbindung mit nem Microcontroller..
MillenChi - Di 05 Jan, 2010 09:36
Titel:
nur 1x pro Sek is echt blöd. Na gut, damit isses dann egal.
Dann halt doch Phidgets Wink
ZZottel - Di 05 Jan, 2010 20:08
Titel:
Ich weiß nicht, wie oft pro Sekunde die Steuergeräte ihre Messwerte aktualisieren. Ich kann mir durchaus vorstellen, dass es da auch Unterschiede je nach STG und betrachtetem Wert gibt.
Mit meinem FIS-Control lese ich aktuell 3x pro Sekunde neue Werte vom Steuergerät ein.
Die maximale theoretische Aktualisierungsrate ist schon durch das KW1281-Protokoll bedingt. Typische Baudrate ist z.B. 9600 oder 10400. Effektive Bitrate ist etwas niedriger da Startbit, Stoppbit und Paritätsbit keine Nutzdaten sind.
Dann kommt noch dazu, dass die Kommunikation zwischen Controller und STG auf einer Leitung bidirektional läuft. Sender und Empfänger tauschen also ständig ihre Rolle. Bei jedem Wechsel wird eine "Interbyte Pause" eingefügt. Die kann zwar je nach STG fast 0 sein, liegt aber üblicherweise zwischen 2 und 5 ms. Manche STGs scheinen gar nur in einem 10ms-Raster zu senden (Quelle: http://www.freediag.org/opendiag/1651.html).
Mit diesen ganzen Annahmen komme ich in die Gegend von 5 Aktualisierung eines MWBs pro Sekunde.

Für das FIS-Control kommt noch dazu, dass ich ja auch das Display im Kombiinstrument entsprechend häufig aktualisieren muss. Da das Display (zumindest meines) relativ träge ist, also die Pixel recht lange nachleuchten ist eine Ansteuerung mit mehr als 3 Hz nicht sinnvoll.

@MillenChi: Ich fahre selbst einen Turbo... es geht nix über eine analoge Anzeige des Ladedrucks. Da ist die Zeigerposition nämlich schön synchron mit den Mundwinkeln.
ZZottel - So 10 Jan, 2010 22:58
Titel:
Die erste Software für mein "FIS-Control OBD" ist jetzt fertig... es sind zwar noch nicht alle Funktionen drin, die ich geplant habe. Aber zumindest einen beliebigen MWB kann man sich schonmal im FIS anzeigen lassen (kurzen Video-Clip gibt es auf meiner Homepage).
Wer das "FIS-Control OBD" testen will meldet sich bei mir. Idealerweise sollte schon das normale "FIS-Control" aufgebaut sein und funktionieren. Außerdem braucht man noch ein K-Line-Interface, z.B. das von Blafusel: http://www.blafusel.de/obd/obd2_kw-interf.html

Das Interface besteht im Wesentlichen aus einem MAX232 und einem MC33290.
Wer den MC33290 direkt auf die FIS-Control-Platine integriert, spart sich aber beide MAX232-Pegelwandler. Wenn jemand Lust hat, kann er mein Eagle-Layout vom FIS-Control entsprechend für OBD anpassen. Würde mich freuen, wenn mir jemand diese Arbeit
abnimmt...

Edit: Link repariert
Torro - Mo 11 Jan, 2010 09:15
Titel:
Ich bin dabei...normales "FIS-Control" vorhanden.
Dein Link zu Blafusel geht bei mir nicht.
Wie siehts bei anderen aus ?
MfG
Christoph1 - Mo 11 Jan, 2010 10:55
Titel:
http://www.blafusel.de/bilder/obd2/kw1281_sch.png

Wo hast die K-Line abgegriffen ? Direkt an der Diagnose Buchse ?

Wenn du mir sagst wo du Rx Tx für die OBD Schaltung angeschlossen hast (am Atmega) Dann würd ich mal versuchen das Layout anzupassen.
Den MC33290 gibts wohl nur als SMD Version oder ?

gruß Christoph
ZZottel - Mo 11 Jan, 2010 12:45
Titel:
@Christoph1:
Ja, K-Line habe ich mir im Auto von der Diagnose-Buchse geholt. Am Schreibtisch hole ich mir die K-Line natürlich direkt vom KI.

RX vom MC33290 (Pin 6) kommt an RX vom ATmega (Pin 14).
TX vom MC33290 (Pin 5) kommt an TX vom ATmega (Pin 15).

Habe den MC33290 bisher auch nur als SMD-Version gesehen.
ZZottel - So 17 Jan, 2010 21:56
Titel:
Software ist jetzt soweit fertig. Eine Option zum Fehlerspeicher auslesen baue ich vielleicht noch rein.

Einen Videoclip von dem "FIS-Control OBD" in Aktion gibt es hier:
http://zzottel.de/joomla/index.php/car/fis-control-obd

Das abgeänderte Platinenlayout ist auch fertig.
ZZottel - Mo 22 Feb, 2010 23:46
Titel:
Tester gesucht!

Das FIS-Control OBD ist fertig und läuft bei mir schonmal prächtig. Jetzt suche ich noch Tester, die die Schaltung bei sich ausprobieren wollen. Ich habe eine fertig aufgebaute Platine hier, die ich dazu bereitstellen würde.

Voraussetzungen: Einen Audi oder VW mit "großem" Bordcomputer. Das Display im Kombiinstrument muss per 3-Leiter-Bus ansteuerbar sein, außerdem muss der Tacho auf das Ausstattunsgmerkmal "Navigation" codiert sein.

Bitte meldet euch nur, wenn ihr euch zutraut Spannungsversorgung, 3-Leiter-Bus und die OBD-Leitung im Fahrzeug abzugreifen und entsprechende Kabel zur FIS-Control-Platine zu verlegen.
Torro - Di 23 Feb, 2010 08:45
Titel:
Ich würde die Software testen,

die Schaltung ist vorhanden,muß nur noch den MC33290 besorgen und einlöten, brauche deine also nicht
Vw Golf mit FIS 1J5 920 846 A mit Navi vorhanden.

Wo kriege ich den MC33290 auf die schnelle her...

Torro
mikado - Di 23 Feb, 2010 09:29
Titel:
Würd gern testen.
Bei mir läuft nur schon alles über CAN.
Aber wenn du in die Richtung mal was machst bin ich dabei.
ZZottel - Di 23 Feb, 2010 13:09
Titel:
@torro: Welche Schaltung hast du? Die alte FIS-Control-Schaltung, oder schon die neue FIS-Control OBD?
Den MC33290 habe ich mir von Blafusel bestellt.

@mikado: Solange wie ich kein Auto mit CAN habe, wird da von mir nix kommen.
Welches Auto hast du denn?
mikado - Di 23 Feb, 2010 13:24
Titel:
Fahr im mom nen A3 2.0TDI Modell 2004
Torro - Di 23 Feb, 2010 18:41
Titel:
Nein ich habe mir noch die Platine mit FIS-Controll damals bestellt und auch fertig bestückt...zum Glück alles mit Fassung.
Habe schon beide Layouts verglichen,ein Umbau auf Mc33299 ist problemlos möglich(eventuell sogar mit Adapterplatine, um beide Schaltkreise nutzen zu können)

edit
Habe mir eben fix den Chip bei Herrn Schäfer bestellt.

MfG
ZZottel - Di 23 Feb, 2010 19:30
Titel:
@mikado: Beim Audi A3 8P gibt es keinen 3LB mehr fürs Kombi. Ohne CAN geht also tatsächlich nix.

@Torro: Ich habe bis vor kurzem ja auch alles mit dem "original" FIS-Control gemacht. Dazu hatte ich einfach das serielle K-Line-Interface (http://blafusel.de/obd/obd2_kw-interf.html) vom Blafusel an den UART-Anschluss gehängt. Pegelwandlung von TTL auf RS-232 und zurück ist zwar doppelt gemoppelt, aber gehen tut das ohne Probleme.

@alle: Wer schon ein normales FIS-Control aufgebaut hat, kann das mit einem seriellen OBD-Interface zu einem "FIS-Control OBD" upgraden.
Torro - Di 23 Feb, 2010 20:29
Titel:
Genau darauf bin ich noch gar nicht gekommen. Ein serielles Interface von Blafusel habe ich auch noch irgendwo liegen.Naja der Chip ist bestellt,dann wird wieder gebastelt.
Kannst du mir den OBD-Controll Code mal schicken ?
ZZottel - Di 23 Feb, 2010 20:39
Titel:
@Torro: Hast ne PN.
ZZottel - So 14 März, 2010 00:26
Titel:
Update: Mittlerweile geht aus das Auslesen des Fehlerspeichers von den Steuergeräten. Allerdings muss für die neue Software der ATMega32 auf der FIS-Control-OBD-Platine gegen einen ATMega644P ausgetauscht werden (auf 32K konnte ich das nicht mehr eindampfen).
Torro - So 14 März, 2010 09:12
Titel:
Habe mich mal auf die Suche nach einem Atmega644P gemacht...Da ich sowieso noch Bauteile bestellen wollte,kann ich mir ja gleich einen mitbestellen. Very Happy
Bei Reichelt habe ich folgendes gefunden

Atmega 644-20PU zum Preis von 5,55 Euro.
Flash Memory 64kb
EEprom 2kb
Ram 4kb

Ist das der Richtige ?
Ein schönes Wochenende noch.
Torro
ZZottel - So 14 März, 2010 09:47
Titel:
Nein, der ATMEGA 644P-20PU ist der richtige. Der ist sogar noch ein paar Cent günstiger Smile
Torro - So 14 März, 2010 13:51
Titel:
Hm den scheint es bei Reichelt garnicht zu geben.Hast du noch andere Bezugsquellen ?
Danke
ZZottel - So 14 März, 2010 14:08
Titel:
Doch, den gibt es bei Reichelt. Bestellnummer ist "ATMEGA 644P-20PU".
Slavi - So 14 März, 2010 16:51
Titel:
http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=A363;GROUPID=2959;ARTICLE=88482
Torro - So 14 März, 2010 17:19
Titel:
Gut Danke habe ihn zwischenzeitlich schon gefunden...
Christoph1 - So 14 März, 2010 19:09
Titel:
Weiss jemand wo ich die MFA Tasten abgreifen kann ? Sind die irgendwo gesteckt? Hab nen A3 8L
Slavi - So 14 März, 2010 19:30
Titel:
na wenst das raus gefunden hast kriegst von mir ne Medaille
Ich schaffe es am Passat nicht
Christoph1 - So 14 März, 2010 19:59
Titel:
hehe hab selber was gefunden geht wohl direkt aufs Kombiinstrument...

http://www.passatplus.de/umbauten/kombiinstrument/mfa-kabel.htm
Torro - So 14 März, 2010 20:06
Titel:
Ja ist richtig die sind genau am Kombi zu finden
Christoph1 - So 14 März, 2010 20:11
Titel:
Hmm ok wollt das ganze eigentlich steckbar machen ohne irgendwas was zu löten oder so *g*
Mal schaun vielleicht kommt man auch einfach an den stecker am lenkrad
ZZottel - Fr 10 Sep, 2010 23:11
Titel:
Kennt ihr das auch? Da baut man sich extra einen CarPC ins Auto, nur um unterwegs Tetris zocken zu können... aber das muss nicht sein: Mit FIS-TRIS.

(Nein, leider ist das ganze momentan noch nicht spielbar)
swf2001 - So 12 Sep, 2010 17:03
Titel:
LOL. Zu geil! Wenn das noch spielbar wäre... Smile

(dann würde ich mich beim Autofahren wohl zu oft ablenken lassen... Wink)
W201 - So 04 Dez, 2011 19:22
Titel:
Hallo,

@ZZottel

Ich hätte demnächst Interesse und hätte noch ein paar fragen.
Fahre einen A8 D2 Mit Naviplus,CD-Wechsler,TMC usw.Habe vor demnächst einen CAR-PC einzupflanzen mit Radio empfang mit dem umgebauten Traffic Ford Radio.
Werden die Navi pfeile wie gehabt angezeigt(wie im Naviplus),werden auch die Radio sender,CD Tracks und das FIS weiterhin angezeigt wie gehabt.
Und zusätzlich mit einer OBD-SW einige MWB.

Habe ich das richtig verstanden.

Mfg
ZZottel - So 04 Dez, 2011 19:37
Titel:
@W201:
Ohne das "Navi plus" wirst du keine Navipfeile im FIS mehr haben, weil dein CarPC vermutlich weder 3-Leiter-Bus noch CAN-Bus hat.
Das gleiche gilt für die Radiosender-Anzeige. Da ließe sich aber eventuell noch was basteln, da man dem FIS-Control die Radiosender auch per serieller Schnittstelle schicken kann.
W201 - So 04 Dez, 2011 20:16
Titel:
ZZottel hat folgendes geschrieben:
@W201:
Ohne das "Navi plus" wirst du keine Navipfeile im FIS mehr haben, weil dein CarPC vermutlich weder 3-Leiter-Bus noch CAN-Bus hat.

Woher weißt du das??

Hallo,

@ZZottel,

in meinem Beitrag oben habe ich doch schon erwähnt das ich TMC usw.habe.
Mein Fahrzeug ist von 2002 und hat CAN-BUS.

Mfg
ZZottel - So 04 Dez, 2011 20:28
Titel:
@W201:
Ich hatte dich so verstanden, dass du das "Navi plus" durch einen CarPC ersetzen willst. Bisher sendet das "Navi plus" die Abbiegepfeile an das FIS-Display.
W201 - So 04 Dez, 2011 20:45
Titel:
ZZottel hat folgendes geschrieben:
@W201:
Ich hatte dich so verstanden, dass du das "Navi plus" durch einen CarPC ersetzen willst. Bisher sendet das "Navi plus" die Abbiegepfeile an das FIS-Display.


Hallo,

@ZZottel,

doch du hast richtig verstanden.
Ich möchte das NaviPlus austauschen gegen einen CarPC.
Und würde dein FIS-CONTROL evtl.kaufen.
Meine Frage war eigentlich,ob man mit dem FIS-CONTROL die Pfeile,FIS,Lenkradbedienung,CDtracks und die Radioanzeige beibehalten könnte.
Und dazu noch einige MWB von dem jeweiligen Steuergeräten mit OBD.

Geht das mit dem FIS-Control.

Mfg
ZZottel - So 04 Dez, 2011 20:55
Titel:
@W201
Für dein Vorhaben ist das FIS-Control nicht geeignet. Vor allem fehlt dir auch die passende Software auf deinem CarPC. Du müsstest die Navi-Software und den Media-Player anzapfen, um an die entsprechenden Daten zu kommen. Und danach müssten die Daten noch passend für die Anzeige im FIS-Display aufbereitet werden.

Als Diagnose-Interface könntest du das FIS-Control zwar schon benutzen. Aber für diesen Zweck gibt es günstigere Lösungen.
W201 - So 04 Dez, 2011 22:44
Titel:
Hallo,

@ZZottel

Was kann man da machen damit über Carpc die gleichen Funktionen wie im NaviPlus angezeogt bekommen.

Für Tipps oder Unterstürtzung würde ich mich freuen.

Mfg
ZZottel - So 04 Dez, 2011 23:17
Titel:
@W201
Fertige Lösungen dafür kenne ich nicht. Selbermachen ist für einen allein sicherlich zu zeitaufwändig.
Sascha1271991 - So 23 März, 2014 21:52
Titel:
Hi, du wirst mir wahrscheinlich nicht verraten, wie das 3LB Protocoll funktioniert oder? Smile

Bin zwar auf einige Informationen wie FIS Fool gestoßen, aber die Seiten existieren schon gar nicht mehr, sodass ich auch keinen Quellcode für Projekte gefunden habe.
Würde halt gern die oberen zwei Zeilen ansteuern können und wenns geht auch das ganze Display Pixel für Pixel.

Hab auch erfahrung mit C und dem programmieren von Atmegas. Hab auch bereits Grafikdisplays angesteuert. Nur zu dem 3LB find ich halt quasi nichts. Hab auch leider kein Navi da was 3LB unterstützt, sonst würd ich den Datenverkehr einfach mitloggen.

Mit freundlichem Gruß Sascha
vegfokic - So 13 März, 2016 08:51
Titel:
Hi
Anybody has the basic source code for atmega to use the first two line of the FIS display? I have a Passat B5.5 cluster and I want to show some text on it via enable, data, clock wires.
ZZottel - So 13 März, 2016 09:53
Titel:
I posted some BASCOM source code for this here:
http://www.car-pc.info/phpBB2/viewtopic.php?p=267222#267222

I also did an improved code for the ATMEGA in C:
http://nefariousmotorsports.com/forum/index.php?PHPSESSID=qm6gkicd2i06hihs87pq9n4q03&topic=8787.msg78125#msg78125
vegfokic - So 13 März, 2016 19:22
Titel:
@ZZottel
I tried the bascom code in your first link but nothing happened. I dont know where is the problem. The upper part of the FIS display is still blank. My cluster coding begin with 21 this consist of the +16 navigation, I think it has to be set if I want that the cluster would be able to get the messages via 3LB. I use atmega8 running at 8Mhz internal frequency supplied at 5V. The atmega pins are a little bit different than in your code. I connected the FIS clock to PD2, FIS data to PD3, FIS en to PD4 and they are also modified in the first part of bascom code. May I do something wrong?

The second link source code also running on atmega8 but also nothing happened. I can not send text or caracter to the cluster via serial. only some caracter come off from the atmega to the PC in terminal windows.
ZZottel - So 13 März, 2016 19:31
Titel:
The coding is not correct. The example uses the "Radio protocol" not the "Navigation protocol". Don't set the coding to +16.

The source code I have posted in the other forum does not use the UART. I post it here again.
Beacuse you are using ATMEGA8 with different clock, you will have to change the Timers.

Code:

/*
 * Program: avr_to_fis
 * Target: ATMega32 @ 11.0592 MHz
 * IDE: WinAVR-20100110
 * Compiler: avr-gcc (WinAVR 20100110) 4.3.3
 * Author: Stefan Bieger
 * Website: www.fis-control.de
 * Date: 2015-07-26
 */

#include <avr>
#include <avr>
#include <avr>
#include <util>
#include <string>

#define CLK 0x20 // Portd.5
#define DAT 0x10 // Portd.4
#define ENA 0x08 // Portd.3

char string[17] = {0};
uint8_t update = 0;

void init_gpio(void)
{
   PORTD = CLK | DAT;
   DDRD = CLK | DAT | ENA; // ENA is really unidirectional in radio mode (not like the 3LB for nav)
}

void init_timer(void)
{
   TCCR1B = (1<<WGM01) | (1<<CS10); // CTC mode, no prescaler
   TIMSK = (1<<OCIE1A); // enable CTC interrupt
   OCR1A = 0xFFFF; // initialize to some value
}

uint8_t calc_checksum(const uint8_t* const data)
{
   uint8_t i;
   uint8_t checksum = 0xFF;

   for (i=0; i<17; i++)
   {
      checksum -= data[i];
   }

   return (checksum);
}

void write_to_fis(const char* const text)
{
   update = 0;
   strncpy(string, text, 16);
   update = 1;
}

int main(void)
{
   wdt_disable();
   init_gpio();
   init_timer();
   sei();

   while (1)
   {
      write_to_fis("12345678ABCDEFGH");
      _delay_ms(1000);
      write_to_fis("HALLO   WELT");
      _delay_ms(1000);
   }
}

ISR(TIMER1_COMPA_vect)
{
   static uint8_t state = 0;
   static uint8_t byte = 0;
   static uint8_t bit = 0;
   static uint8_t array[18] = {0};

   switch (state)
   {
      case 0:
         if (update)
         {
            update = 0;
            array[0] = 0xF0;
            memset(&array[1], 0x20, 16); // fill with blanks
            memcpy(&array[1], string, strlen(string));
            array[17] = calc_checksum(array);
         }

         if (array[0] == 0xF0)
         {
            PORTD = CLK | DAT | ENA; // ENA high
            TCCR1B = (1<<WGM01) | (1<<CS10); // CTC mode, no prescaler
            OCR1A = 1106 - 1; // next interrupt in 100 us
            byte = 0;
            bit = 7;
            state = 1;
         }
         break;
      case 1:
         PORTD &= ~ENA; // ENA low
         state = 2;
         break;
      case 2:
         PORTD |= ENA;
         OCR1A = 553 - 1; // next interrupt in 50 us
         state = 3;
         break;
      case 3:
         if (array[byte] & (1<<bit))
         {
            PORTD &= ~DAT;
         }
         else
         {
            PORTD |= DAT;
         }
         OCR1A = 365 - 1; // next interrupt in 33 us
         state = 4;
         break;
      case 4:
         PORTD &= ~CLK;
         OCR1A = 730 - 1; // next interrupt in 66 us
         state = 5;
         break;
      case 5:
         PORTD |= CLK;
         OCR1A = 365 - 1; // next interrupt in 33 us

         if (bit)
         {
            bit--;
            state = 3;
         }
         else if (byte < 17)
         {
            bit = 7;
            byte++;
            state = 3;
         }
         else
         {
            state = 6;
         }
         break;
      case 6:
         PORTD |= DAT;
         OCR1A = 166 - 1; // next interrupt in 15 us
         state = 7;
         break;
      case 7:
         PORTD &= ~ENA; // ENA low
         TCCR1B = (1<<WGM01) | (1<<CS12); // CTC mode, prescaler 256
         OCR1A = 21600 - 1; // next interrupt in 500 ms
         state = 0;
         break;
   }
}

vegfokic - Mo 14 März, 2016 14:23
Titel:
Thanks for the code

I modyfied the cluster coding and the bascom code works well Smile
After that I tried the C code with some modyfication to mach atmega8 but something wrong. In the interrupts value of OCR1A changed 11.0592/8=1,38 times smaller because I use 8Mhz instead of 11,05MHz.
The problem is that the atmega8 dont has WGM01 than the atmega32 therefore I used WGM12 and WGM13 to CTC mode. I dont know whether it is good or not or any other problem there is.

Code:
#include <util>
#include <avr>
#include <avr>
#include <string>
#include <avr>

#define CLK 0x02 // Portb.1 OC1A
#define DAT 0x04 // Portb.2 OC1B
#define ENA 0x20 // Portd.5 INT1

char string[17] = {0};
uint8_t update = 0;

void init_gpio(void)
{
PORTB = CLK | DAT;
DDRB = CLK | DAT; // ENA is really unidirectional in radio mode (not like the 3LB for nav)
DDRD = ENA; // ENA is really unidirectional in radio mode (not like the 3LB for nav)
}

void init_timer(void)
{
TCCR1B = (1<<WGM12) | (1<<CS10) | (1<<WGM13); // CTC mode, no prescaler TCCR1B = (1<<WGM01) | (1<<CS10>1 mind kettőbe ctc mód
TIMSK = (1<<OCIE1A); // enable CTC interrupt
OCR1A = 0xFFFF; // initialize to some value

}

uint8_t calc_checksum(const uint8_t* const data)
{
uint8_t i;
uint8_t checksum = 0xFF;

for (i=0; i<17; i++)
{
checksum -= data[i];
}

return (checksum);
}

void write_to_fis(const char* const text)
{
update = 0;
strncpy(string, text, 16);
update = 1;
}

int main(void)
{
wdt_disable();
init_gpio();
init_timer();
sei();

while (1)
{
write_to_fis("12345678ABCDEFGH");
_delay_ms(1000);
write_to_fis("HALLO WELT");
_delay_ms(1000);
}
}

ISR(TIMER1_COMPA_vect)
{
static uint8_t state = 0;
static uint8_t byte = 0;
static uint8_t bit = 0;
static uint8_t array[18] = {0};

switch (state)
{
case 0:
if (update)
{
update = 0;
array[0] = 0xF0;
memset(&array[1], 0x20, 16); // fill with blanks
memcpy(&array[1], string, strlen(string));
array[17] = calc_checksum(array);
}

if (array[0] == 0xF0)
{
PORTB = CLK | DAT; // ENA high
PORTD = ENA; // ENA high
TCCR1B = (1<<WGM12) | (1<<CS10) | (1<<WGM13); // CTC mode, no prescaler
OCR1A = 800 - 1; // next interrupt in 100 us
byte = 0;
bit = 7;
state = 1;
}
break;
case 1:
PORTD &= ~ENA; // ENA low
state = 2;
break;
case 2:
PORTD |= ENA;
OCR1A = 400 - 1; // next interrupt in 50 us
state = 3;
break;
case 3:
if (array[byte] & (1<<bit))
{
PORTB &= ~DAT;
}
else
{
PORTB |= DAT;
}
OCR1A = 264 - 1; // next interrupt in 33 us
state = 4;
break;
case 4:
PORTB &= ~CLK;
OCR1A = 528 - 1; // next interrupt in 66 us
state = 5;
break;
case 5:
PORTB |= CLK;
OCR1A = 264 - 1; // next interrupt in 33 us

if (bit)
{
bit--;
state = 3;
}
else if (byte < 17)
{
bit = 7;
byte++;
state = 3;
}
else
{
state = 6;
}
break;
case 6:
PORTB |= DAT;
OCR1A = 120 - 1; // next interrupt in 15 us
state = 7;
break;
case 7:
PORTD &= ~ENA; // ENA low
TCCR1B = (1<<WGM12) | (1<<CS12) | (1<<WGM13); // CTC mode, prescaler 256
OCR1A = 15625 - 1; // next interrupt in 500 ms
state = 0;
break;
}
}
ZZottel - Mo 14 März, 2016 15:02
Titel:
I think the (1<<WGM13) is wrong. Just don't set it.
Rest looks good to me.
vegfokic - Mo 14 März, 2016 15:14
Titel:
Does not work without (1<<WGM13) also.
I noticed that when you paste your code the first some lines which consist of #include did not appear fully (avr.interreupt.h, avr.wdt.h, avr.io.h) I was in trouble but I solved the missing parts. I think they were in the bracket.
There is no problem during compiler but he display is still blank.
Whether is there any missing parts from your code because of paste loos?
ZZottel - Mo 14 März, 2016 16:09
Titel:
I will upload the source code as attachment later this evening.
ZZottel - Mo 14 März, 2016 20:08
Titel:
Here it is.
vegfokic - Mo 14 März, 2016 20:10
Titel:
Thanks
Alle Zeiten sind GMT + 1 Stunde
Powered by phpBB2 Plus and Kostenloses Forum based on phpBB