View Single Post
Stary 08-05-2020, 22:19   #13
tedi_k
FCP member
 
Avatar tedi_k
 
Imię: Tadeusz
Zarejestrowany: 04-11-2011
Skąd: Katowice
Model: Mitsubishi Outlander PHEV, C-max Energi (USA) PHEV
Silnik: 2.4 PB, 2.0 PB wolnossące cykl Atkinsona - hybryda plug-in
Rocznik: 2019, 2016
Postów: 18,052
Domyślnie Odp: Sync3 - nowy "starter", wyświetlanie logo stacji radiowych

No to kontynuacja tematu...Goście nie mogą oglądać obrazków w postach. Zarejestruj się klikając tutaj aby uzyskać pełen dostęp do forum.

U mnie jak w przedszkolu - zabawa ma służyć nauce.
Toteż po namierzeniu jak się wysyła informacje do wyświetlania logo, przeszedłem do analizy:
dlaczego ACMy z platformy MK5/Edge/S-max MK2 wyświetlają logo jedynie na DAB.
Generalnie muszą umieć wysłać stosowną informację, jedynie z jakiegoś powodu nie wysyłają jej dla FM.

No i w wyniku śledztwa - sprawa została wyjaśniona.
Winny tej sytuacji jest bląd w sofcie ACM (co było oczywiste od początku). Błąd jest umiejscowiony w procedurze budującej wartość danych ramki 2D5. Wcześniej pisałem, że dzięki posłaniu w tej ramce stosownych danych (id stacji radiowej) logo jest wyświetlane.
Okazuje się, iż oprócz 2 bajtów id stacji radiowej (bajty 3 i 4 danych tej ramki), w bajcie 2 tej ramki jest flaga "poprawności danych do wyświetlania logo". Wartość 0 na bajcie 2 oznacza "id stacji poprawny - można wyświetlać log". Wartość 1 w bajcie 2 danych ramki 2D5 oznacza "nie wyświetlać logo".

Koledzy od softu ACM prawidłowo obsługują tę flagę dla DAB w dyskutowanych ACMach i mają ją ustawioną na 1 na stałe dla FM. No i "tu jest pies pogrzebany"...
Wszelkie informacje niezbędne do wyświetlenia logo są na "swoim miejscu", jedynie wartość flagi mówi "nie wyświetlać".Goście nie mogą oglądać obrazków w postach. Zarejestruj się klikając tutaj aby uzyskać pełen dostęp do forum.

Wykonałem więc "jakże skomplikowany programik" wysyłający w ślad za ramką z flagą "nie wyświetlać" ramkę z flagą "wyświetlać". Programik zawiera już poprawkę przywracającą logo stacji w trakcie nadawania wiadomości (na filmie poniżej w trakcie wiadomości na RMF FM logo znika).

Kod:
// Trankoder ramki 2D5 MM-CAN/HS3-CAN
// modyfikujący flagę dostępności logo do wyświetlania na Sync3 wersji 3.2/3.3/3.4

#include <can.h>
#include <mcp2515.h>

#define _MCP2515_CS 10                                             // sygnał CS modułu CAN - D10
#define _MCP2515_SCK 13                                            // sygnał zegara SCK modułu CAN - D13
#define _MCP2515_INT 2                                             // sygnał przerwania INT modułu CAN - D2
#define _MCP2515_SI 11                                             // sygnał we SI modułu CAN - D11
#define _MCP2515_SO 12                                             // sygnał wy SO modułu CAN - D12

struct can_frame can_RCV;

MCP2515 mcp2515(_MCP2515_CS);                                      // definicja chip select dla MCP2515

bool interrupt = false;

void setup() 
{
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS,MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz  - HS-CAN & MM-CAN
//  mcp2515.setBitrate(CAN_125KBPS,MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz  - MS-CAN
  mcp2515.setNormalMode();
//  Serial.begin(115200);
}

void loop() {
  CAN_MsgRead();
}

void CAN_MsgRead() {
  uint8_t irq = mcp2515.getInterrupts();

  if (irq & MCP2515::CANINTF_RX0IF) 
    if (mcp2515.readMessage(MCP2515::RXB0, &can_RCV) == MCP2515::ERROR_OK) analize_CAN_frame();
  if (irq & MCP2515::CANINTF_RX1IF)
    if (mcp2515.readMessage(MCP2515::RXB1, &can_RCV) == MCP2515::ERROR_OK) analize_CAN_frame();
}

void analize_CAN_frame() {
  if (can_RCV.can_id == 0x2D5 && (can_RCV.data[0] == 0x51 || can_RCV.data[0] == 0x09) && can_RCV.data[1] == 0x01) {
    can_RCV.data[1] = 0x0;
    delay(1);
    mcp2515.sendMessage(&can_RCV);
  }
}
No i efekt działania programu całkowicie potwierdził trafność diagnozy. Logo zaczęło "pojawiać się i znikać". Efekt odbierania przez Sync3 ramki "brak logo" a zaraz potem "jest logo"...
Testy poniżej widoczne prowadzone są w C-max Energi USA z ACM wymienionym na ACM z MK5 DS7T-19C107-GJ - jeden z najlepszych ACM z MK5 - z DAB, TMC, ANC itp. itd - to co niezbędne do C-max Energi. Zapewne inne ACM z MK5 i pochodnych będą zachowywać się analogicznie.

Efekt widoczny na filmie:

https://youtu.be/Hsx355YNvSA

Teraz wnioski:
1) Najlepiej by było znaleźć kogoś posiadającego wiedzę i sprzęt do zidentyfikowania fragmentu kodu ACM odpowiedzialnego za wskazany błąd a następnie modyfikacja kodu ACM by błąd wyeliminować. Wówczas loga stacji radiowych na tej grupie ACMów wyświetlały by się poprawnie bez dalszych działań (bez modyfikacji softu Sync3 i dodatkowego sprzętu).
2) Jeśli nie da się zrealizować wariantu 1) to można się pokusić o stworzenie modułu "traslującego" transmisję z ACM do APIM, przekodowującego ramkę 2D5 do postaci "zezwalającej na logo". Potrzebny byłby moduł sprzętowy z 2 magistralami CAN (używany przeze mnie i powszechnie dostępny moduł MCP2515 ma 1 CAN a użycie 2 modułów MCM2515 wprowadza istotne komplikacje). Jeśli by się udało znaleźć stosowny sprzęt, to wtedy CAN1 modułu trzeba by podpiąć do ACM, następnie odcięty od ACM MM-CAN czy HS3-CAN podpiąć do CAN2 i napisać prościuteńki programik przesyłający z CA1 na CAN 2 wszystko co nadaje ACM za wyjątkiem ramki 2D5 - ją wysyłało by się dopiero po zmodyfikowaniu. W drugą stronę (od CAN2 do CAN1) ruch byłby bez filtrowania. Przy takim rozwiązaniu loga by wyświetlały się bez migania.

Ostatnio edytowane przez tedi_k ; 08-05-2020 o 22:42
tedi_k jest offline   Odpowiedź z Cytatem