Datum: 29.04.2008 11:06
Hallo, ich habe im Rahmen einer wissenschaftlichen Arbeit eine Bibliothek geschrieben, mit der es möglich ist den CAN-Controller des AT90CAN128 relativ schnell und komfortabel ansprechen zu können. Eine ausführliche Anleitung und Beispielcodes sind auch vorhanden. Bei Fragen einfach melden MfG Marco
Datum: 29.04.2008 13:14
Sorry, aber sollte man nicht im Rahmen einer wissenschaftlichen Arbeit das h-File nur für Deklarationen und die Funktionen in ein c-File auslagern? Ansonsten sieht das echt gut aus. Vor allem, dass du die Docu dazu gelegt hast. Danke Werner
Datum: 29.04.2008 17:35
Ok, hier nochmal die Version mit ausgelagerten Funktionen. Ich würde mich über Anregungen, Verbesserungen oder einfach nur eine Rückmeldung freuen... Gruß Marco
Datum: 04.05.2008 19:30
Hallo Marco, der klare Stil des Programms gefällt mir. In dem pdf File gehen aber set und get durcheinander. Welchen Compiler verwendest Du? Wie sieht main() aus? Wo sind die Interrupt Service Routinen? Z.B. wartest Du bei CAN_sendData(...) bis TXOK in CANSTMOB. Dieses Bit kann nur durch "read modify write" geklärt werden und nicht durch clearbit.... Ich würde gern auf Deinem Ansatz aufbauen! Gruß Gerhard
Datum: 04.05.2008 20:42
Hallo Gerhard, zuerst einmal vielen Dank für die Rückmeldung. Es freut mich zu lesen, dass der Stil des Programms dir gefällt. Bei welcher Funktion genau sind get und set durcheinander? Ich habe für diese Bibliothek den WinAVR Compiler zusammen mit dem AVRStudio verwendet. Die Hauptfunktion main() kann sehr einfach aussehen. Um zum Beispiel Daten zu senden:
main(){
CAN_init (1000 , TX );
// Zu sendende Daten
CAN_message msg ;
msg.id = 0 x12345678 ;
msg.idm = 0 xffffffff ;
msg.data [0] = 0 x11 ;
msg.data [1] = 0 x22 ;
msg.data [2] = 0 x33 ;
msg.data [3] = 0 x44 ;
msg.data [4] = 0 x55 ;
msg.data [5] = 0 x66 ;
msg.data [6] = 0 x77 ;
msg.data [7] = 0 x88 ;
// Objekt 0 auf Empfang setzen
CAN_enableMOB (0, RECEIVE_DATA , msg );
// Daten ¨uber Objekt 0 senden
CAN_sendData (0, msg . data );
while(1){}
}
|
Eine ISR zum Empfang von Daten ist am Ende der CAN.c angehängt. Diese kann ggf. individuell angepasst werden. Beim Senden von Daten über CAN_sendData() wird gewartet, bis das TXOK Flag gesetzt wird und erst dann die Funktion beendet. Das mit dem read-modify-write beim TXOK stimmt so wie du es geschrieben hast. Komischerweise funktioniert es aber auch mit dem clearbit() Makro (zumindest bei meinem Board und Debugger). Wenn du willst kann ich dir ein paar fertige Programme zukommen lassen, die die CAN-Funktionalität ausnutzen... Wenn du noch Fragen hast werde ich sie dir gerne beantworten. Viele Grüße Marco
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos verwenden, Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel