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.