Hallo!
Für meine Arbeit muss ich einen AT90CAN64 programmieren. Habe leider
damit keinerlei Erfahrung...
Das Programm soll den MAX1148 ADC auslesen. Da dieser nur 8 Kanäle hat,
ich aber insgesamt 64 auslesen möchte, werden zudem über Port A
Multiplexer gesteuert. Ich benutze die von Atmel für diesen MC zur
Verfügung gestellt CAN software Libraries
([[http://www.atmel.com/dyn/products/product_card.asp?PN=AT90CAN64]])
Mein Problem ist, dass ich mit dem Scope keinerlei Signale am SPI sehe.
Hier mein Code
1
//_____ I N C L U D E S ________________________________________________________
2
#include<avr/io.h>
3
#include<avr/interrupt.h>
4
#include<avr/iocan64.h>
5
#include"compiler.h"
6
#include"at90can_drv.h"
7
#include"spi_lib.h"
8
#include"can_lib.h"
9
10
//_____ D E F I N I T I O N S __________________________________________________
Hat jemand eine Idee, woran es liegen könnte? Wenn ich die 3 Zeilen, in
der ich Daten auf dem SPI hin und her schicke, auskommentiere, läuft
alles so wie es soll...
Gruss
Florian
>Mein Problem ist, dass ich mit dem Scope keinerlei Signale am SPI sehe.
Der wichtigste Teil des Programmes fehlt mal wieder :(
Nutzt du auch den SS Pin für das Slaveselect?
Lies dir doch meinen Code durch!
Da kommen Kommandos vor die heißen
1
Spi_init_ss();
2
Spi_disable_ss();
3
Spi_enable_ss();
Auch ohne die "CAN Software Libraries" zu kennen, könnte man doch
annehmen, dass das es sich um den SlaveSelect handelt, oder etwa nicht?!
(Sorry wenns ned eindeutig war)
>Lies dir doch meinen Code durch!
Habe ich getan.
>Da kommen Kommandos vor die heißen>> Spi_init_ss();> Spi_disable_ss();>Spi_enable_ss();
Benutzt du nun den SS Pin vom ATMega64 oder nicht?
Das kann ich dort nicht sehen.
>Auch ohne die "CAN Software Libraries" zu kennen, könnte man doch>annehmen, dass das es sich um den SlaveSelect handelt, oder etwa nicht?!
Annehmen heisst nicht wissen.
>Benutzt du nun den SS Pin vom ATMega64 oder nicht?>Das kann ich dort nicht sehen.
es ist der at90can64, nicht der atmega....aber die o.g. Macros verwenden
den SlaveSelect Pin...
So. Nun hab ich auch mal die Files aus den Atmel Libs mit angehangen
Auf die Frage nach dem Schaltplan, ist angehängt.
(Das Value des Crystals ist allerdings falsch. Der hat 8 und nicht 16
MHz)
Mal ne Frage, kann man auch mehr als eine Datei an nen Post anhängen,
oder muss man die dazu in nen Archiv parken?!
>Ich seh nix, außer das>>Bool spi_init (U8 config)>>so aussehen müsste wegen der Clock Macros>>Bool spi_init (U16 config)
Ne! Wenn man mal durchzählt:
SPI_MASTER 1 Bit
SPI_MSB_FIRST 1 Bit
SPI_DATA_MODE_0 2 Bit
SPI_CLKIO_BY_64 3 Bit
SPI_enable 1 Bit
Macht insgesamt 8 Bit...
demnach ist U8 richtig
>Und was sagt dir das?>Aber hast recht, bei seiner Clockeinstellung reicht U8.
Mkay! Vom MC und seinen Registern her sind es 16 Bit. Das stimmt.
Aber ich denke mal, dass Atmel das schon richtig macht, da die diese
Libs selber zum Programmieren verwenden...
>Aber ich denke mal, dass Atmel das schon richtig macht, da die diese>Libs selber zum Programmieren verwenden...
Dann hat von denen aber noch niemand versucht
SPI_CLKIO_BY_2 einzustellen ;)
Hier ist auch noch ein Tippfehler (macht aber nix)
1
#define Spi_enable_ss() (PORTB &= ~(1<<DDB0)) // -- Can be user re-defined
>Was denn?! Habe diese Variante beim Googlen schon des öfteren gesehen,>nicht nur von Atmel...
Ist ja auch nur ein Schönheitsfehler ;)
Hier ist das Problem
1
buffer[1]=spi_getchar();
2
buffer[2]=spi_getchar();
Vor jedem spi_getchar(); muß ein Dummybyte gesendet werden.
spi_getchar(); macht das nicht.
>Hier ist das Problem> buffer[1] = spi_getchar();> buffer[2] = spi_getchar();>Vor jedem spi_getchar(); muß ein Dummybyte gesendet werden.>spi_getchar(); macht das nicht.
Ok! Hab ich eingebaut!
Und auch den Fehler mit dem U16 bei der Funktion spi_init hab ich
behoben!
(Hab das nochmal nachgeguckt, und du hattest recht mit dem 16 bit...)
Allerdings funktioniert es immernoch ned...So wie es aussieht (habe zum
debuggen nach jedem Schritt den Wert von Port c erhöht) kommt er nicht
mal über das
1
// --- Send control byte
2
spi_transmit_master(buffer[0]);
von oben hinaus...
Jemand ne Idee wo der Fehler liegen könnte?!
Gruss
Florian
Hallo euch allen,
ich bin schon seit einiger Zeit auf der Suche nach einem CAN-Bootlader
für den AT90CAN. Leider konnte ich dazu aber kein fertiges Projekt
finden.
Genauere Informationen gibt es unter fogendem Link:
Titel - Beitrag "CAN BUS Bootloader AT90CAN"
Ich hoffe es finden sich einige um dieses Projekt zu realisieren oder
die dabei helfen können.
Grüße martin