mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA32 und SPI


Autor: Clemens Kruse (clemensk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem das ich auch mit viel lesen im Forum nicht lösen 
kann.
Ich habe ein Eval Board von IB Markl mit einem Atmega32 drauf. Dort habe 
ich versucht die SPI Schnittstelle zu konfigurieren. Leider gelingt mir 
das überhaupt nicht.
int x=0;
char INIT[15] = {0x00, 0x03, 0x04, 0x09, 0x02, 0xC3, 0x0A, 0x82, 0x02, 0x0D, 0x01, 0x02, 0x0E, 0x30, 0x00};
DDRA =0xFF;
SPCR=0x5f;
SPSR=0x00;

while(x<=15){
/*Start transmission */ 
SPDR=INIT[x];
/*Wait for transmission complete */ 
while(!(SPSR & (1<<SPIF)));
x=x+1;
}

ich müsste doch zumindest auf dem CLK Pin auf dem Oszi was erkennen? 
Nichtmal das fuktioniert. Was mache ich falsch?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich müsste doch zumindest auf dem CLK Pin auf dem Oszi was erkennen?
>Nichtmal das fuktioniert. Was mache ich falsch?

SS Pin nicht auf Ausgang gesetzt?

>while(x<=15){

while(x<15){

Autor: Clemens Kruse (clemensk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so, ich habe mal folgendes eingefügt:

DDRB = DDRB | 0x10;

damit müsste ich doch pin 4 port a auf ausgang setzen, oder?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>so, ich habe mal folgendes eingefügt:
>DDRB = DDRB | 0x10;
>damit müsste ich doch pin 4 port a auf ausgang setzen, oder?

Ja, und was ist mit dem Rest von DDRB?
Oben steht DDRA!

Autor: Clemens Kruse (clemensk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das oben war noch ein teil von einem anderen code. also ddra bleibt 
unberührt. ich muss doch nur die den pin an dem der clock ist auf 
ausgang setzen, oder? den rest mache ich doch automatisch wenn ich das 
spi initialisiere?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kriegst du es irgendwie gebacken die komplette Initialisierung
von PORTB zu zeigen? Oder ist das zu schwer für dich?

Autor: Clemens Kruse (clemensk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so: mein kompletter code:
[c]
#include <avr/io.h>
#include "delay.h"
// Hauptprogramm
int main(void) {
int x=0;
char INIT[15] = {0x00, 0x03, 0x04, 0x09, 0x02, 0xC3, 0x0A, 0x82, 0x02, 
0x0D, 0x01, 0x02, 0x0E, 0x30, 0x00};
DDRB = (1<<PB4)|(1<<PB5) | (1<<PB7); // Ausgang für MOSI, SS und CLK
//SPCR = ( (1<<SPE)|(1<<MSTR) | (1<<SPR1) |(1<<SPR0));
SPCR=0x5f;
SPSR=0x00;
DDRA = 0xFF;
while(x<=15){
/*Start transmission */
SPDR=INIT[x];
/*Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
x=x+1;
}
// Puls für Step Dir
while(1){
PORTA=0x00;
_delay_ms(4);
PORTA=0xFF;
_delay_ms(4);
}
}

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>so: mein kompletter code:

Sieht doch gut aus. Allerdings hast du nur für
16 Bytes lang Clock auf dem SPI.

>while(x<=15){

Das ist immer noch falsch. Dein Array hat nur
15 Bytes. Du sendest 16.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.