Ik heb het verhaal gelezen, maar zie niet hoe er gedetecteerd kan worden of de data aangekomen is.

Het laatste deel van een CAN-bericht ziet er als volgt uit:
Na de 8 databytes komen er 16 bits CRC-field, 2 bits ACK-field en 7 bits EOF (End of frame)

De zendende node zet de beide ACK bits op 1. Na het zenden luisterd de zende node ook de bus af om te kijken of het bericht ook door iemand ontvangen is. Een node die het bericht ontvangt en accepteert zet bevestigingsbit (ACK)op 0.
Op deze manier weet de zendende node dat zijn bericht door iemand ontvangen is. Het zal dan ook niet opnieuw verzonden worden.

In de CANcontroller kun je instellen welke berichten (aan de hand van de ID's) door een bepaalde node geaccepteerd worden.

Ik heb net even gekeken bij de atmel (at90can128). Deze heeft een interrupt voor als hij geen acknowledgment krijgt. (no detection of a dominant bit). Dit zal bij jou PIC denk ik ook het geval zijn. Ik zie zo in je compiler geen functie daarvoor. Dan zul je deze zelf moeten schrijven. Welke PIC gebruik je eigenlijk ?

Ik gebruik de PIC18F2580 en de PIC18F4580
Deze hebben een ingebouwde CAN controller.

[Bericht gewijzigd door MMSoft op (35%)]

http://ww1.microchip.com/downloads/en/DeviceDoc/39637c.pdf Op bladzijde 338 staat iets over een acknowledge error. Hoe je dit in de registers na kunt gaan weet ik niet zo, ik denk dat je ergens een bitje moet controleren. ik ben niet zo thuis met PICjes, ik programmeer normaal avr.

Ik ben al druk aan het zoeken geweest in de datasheet, maar kan nergens vinden hoe/waar ik kan afvragen of de data aangekomen is.

Wie kan hier iets over vertellen ?

Ik zou het niet kunnen zeggen maar in elk geval bij mij maakt het niet uit of het wordt ontvangen. Want het wordt cyclisch gezonden (sensor op een carrousel). Dus indien het niet gezonden is zal het de volgende ronde mss wel ontvangen worden.

Op 27 februari 2009 09:36:29 schreef High met Henk:
Overigens snap ik dan het bericht van drieske niet helemaal: de ontvanger zou een bit laag trekken?? Tja ik zend niet snel op een bus: ik ontvang liever... Maar lijkt mij gezien bovenstaand verhaal dus ERG vaag. De 1 heeft namelijk zover ik weet prioriteit boven de 0, bovendien staat het ding in listen modus..

Maar het verhaal zegt me ook helemaal niets...

Lijkt me ook niet correct. De zender verstuurd een dominant bit '0', en niet de ontvanger. Als je van de CAN physical driver de TX niet aansluit; hij is dan '1', mag er niks verstuurd worden...

Vaak kun je in de CAN periphal instellen of er alleen geluisterd wordt of ook verzonden kan worden. Voor zover ik weet wordt er in de 'alleen luister' mode ook geen ACK-bit verstuurd.

FullPower

Ik ben nu al stukken verder maar zou zelf mijn programma willen schrijven voor mijn nodes. Nu heb ik gebruik gemaakt van flowcode. Gesimuleerd kan ik alles weergeven maar als ik het compileer gaat het fout! Het programma denkt dat ik werk met een node die gebruik maakt van de MCP2515 over een spi verbinding. Dit is niet het geval met de 18F2580 want die heeft een interne cancontroller. Is het mogelijk om het main programma te copy paste op één met een goede config of zie ik dit fout!! Kan iemand mij hier meer uitleg overgeven aub...

MVG, Georges

Het schema en de foute C code kan je hier vinden!
Main van het programma is wel oke!!

http://www.ggdesign.eu/Canbus_flow.zip