| Autor | Nachricht | 
| ZZottel Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  
 
 
| 
| 
 |  
| @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 Frischfleisch
 
  
 
 Alter: 49
 Anmeldung: 03.04.2011
 Beiträge: 16
 
 
 
 
 |  
 
 
| 
| 
 |  
| 
 
	  | 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 Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  
 
 
| 
| 
 |  
| @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 Frischfleisch
 
  
 
 Alter: 49
 Anmeldung: 03.04.2011
 Beiträge: 16
 
 
 
 
 |  
 
 
| 
| 
 |  
| 
 
	  | 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 Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  
 
 
| 
| 
 |  
| @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 Frischfleisch
 
  
 
 Alter: 49
 Anmeldung: 03.04.2011
 Beiträge: 16
 
 
 
 
 |  
 
 
| 
| 
 |  
| 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 Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  
 
 
| 
| 
 |  
| @W201 Fertige Lösungen dafür kenne ich nicht. Selbermachen ist für einen allein sicherlich zu zeitaufwändig.
 |  
|  |  |  |  
| 
 
 
 |  | 
|  |  | 
 
 
| Sascha1271991 Frischfleisch
 
  
  
 Alter: 34
 Anmeldung: 06.04.2010
 Beiträge: 17
 Wohnort: Eschershausen
 
 
 
 |  
 
 
| 
| 
 |  
| Hi, du wirst mir wahrscheinlich nicht verraten, wie das 3LB Protocoll funktioniert oder?   
 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
 |  
|  |  |  |  
| Hardware: AMD Athlon x2 4450e, 1 GB DDR2 OCZ 800, AsRock N68-S, Audigy 2 ZS
 Software: Windows xp Prof. SP3
 
 |  | 
|  |  | 
 
 
| vegfokic Frischfleisch
 
  
 
 Alter: 44
 Anmeldung: 13.03.2016
 Beiträge: 5
 
 
 
 
 |  
 
 
| 
| 
 |  
| 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 Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  | 
|  |  | 
 
 
| vegfokic Frischfleisch
 
  
 
 Alter: 44
 Anmeldung: 13.03.2016
 Beiträge: 5
 
 
 
 
 |  
 
 
| 
| 
 |  
| @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 Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  
 
 
| 
| 
 |  
| 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 Frischfleisch
 
  
 
 Alter: 44
 Anmeldung: 13.03.2016
 Beiträge: 5
 
 
 
 
 |  
 
 
| 
| 
 |  
| Thanks for the code 
 I modyfied the cluster coding and the bascom code works well
   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 Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  
 
 
| 
| 
 |  
| I think the (1<<WGM13) is wrong. Just don't set it. Rest looks good to me.
 |  
|  |  |  |  
| 
 
 
 |  | 
|  |  | 
 
 
| vegfokic Frischfleisch
 
  
 
 Alter: 44
 Anmeldung: 13.03.2016
 Beiträge: 5
 
 
 
 
 |  
 
 
| 
| 
 |  
| 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 Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  
 
 
| 
| 
 |  
| I will upload the source code as attachment later this evening. |  
|  |  |  |  
| 
 
 
 |  | 
|  |  | 
 
 
|  | 
| ZZottel Forumkenner
 
  
  
 Alter: 47
 Anmeldung: 10.10.2007
 Beiträge: 152
 
 
 
 
 |  | 
|  |  | 
 
 
| vegfokic Frischfleisch
 
  
 
 Alter: 44
 Anmeldung: 13.03.2016
 Beiträge: 5
 
 
 
 
 |  | 
|  |  | 
 
 
|  |