- Ringraziamenti ricevuti 0
Protocollo CAN
Moderatori: Mauro Laurenti
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Si prega Accesso o Crea un account a partecipare alla conversazione.
ho pensato ad un piccolo progettino che mostrasse su un dispaly LCD (controller hitachi) le informazioni che viaggiano sulla presa OBD della mia autovettura.
Ho proceduto per passi cominciando dalla modalità loop e non riscontrondando alcun problema. I messaggi inviati erano perfettamente presenti sul buffer di ricezione e mostrati correttamente sul display. Il problemi sono venuti con le prove in auto. Entrando prima nella modalità LISTEN e successivamente nella modalità NORMAL. Nel primo caso non riuscivo ad ottenere alcun tipo di messaggio e nel secondo caso mandavo in tilt le centraline della vettura
. Durante la fase di debug, mi sono accorto che nei registri BRGCON non venivano scritti i valori che mi aspettavo e per questo motivo ho pensato che i problemi di comunicazione erano proprio i settaggi errati relativi al bit timing.
Ho aperto la libreria è ho notato una inesattezza proprio nel settare i valori di SJW, propSeg, phaseSeg1 e phaseSeg2.
Prendiamo come esempio il parametro SJW che può variare da 1 a 4, ma lo stesso discorso si può applicare anche agli altri tre parametri.
Attualmente se passo SJW come 1, questo viene scritto direttamente nel registro BRGCON1, ma se vediamo il datasheet, se imposto 1 per SJW, nel registro dovrei scrivere 00. Per questo motivo, ho pensato di inserire (modificando la libreria), l'istruzione "SJW = SJW -1" prima della sua scrittura nel registro.
Provato nuovamente in macchina, il dispositivo prima in modalità ascolto e successivamente in modalità normale, ha funzionato regolarmente mostrando i dati richiesti con la funzione CanSendmessage.
Questa ovviamente è una soluzione adottata da un novello in programmazionee siceramente non saprei se ci sono soluzioni...come dire...più professionali.
Volevo segnalare inoltre che nel PDF che descrive la libreria CAN, i primi due flag segnati nella tabella della funzione CANSendMessage, diveramente dalla libreria, non sono "CAN_CONFIG_STD_MSG" e "CAN_CONFIG_XTD_MSG", ma "CAN_TX_STD_FRAME" e "CAN_TX_XTD_FRAME".
Si prega Accesso o Crea un account a partecipare alla conversazione.
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
