Raspberry&ATmega8A&STEPPER

OP #3846300
Lesenswert?
• ▲
▼
Hallo,

nach langem basteln und agieren ist es mir gelungen nun eine SPI 
verbindung zwischen dem Raspberry pi und einem ATmega8A herzustellen.
Mein eigentliches Ziel ist von dem Raspberry dem ATmega einen wert zu 
übergeben damit der wiederum weiss wie viele steps er drehen lassen 
muss.

Ich dachte mir ich schreibe dazu ein kleines Programm und hänge ein paar 
LEDs an um zu sehen  ob sich etwas tut nur leider macht weder eine LED 
noch sonst irgendetwas einen mux.

Ich bin da etwas ratlos.

Hier ist das Programm was ich geschrieben habe:
1
# define F_CPU 1000000UL
2
#include <util/delay.h>
3
#include <avr/io.h>
4

5

6

7

8
char stepValues[5][4] = {{0, 0, 0, 0},                // Stepper aus
9
             {1, 0, 0, 0},                // Step 1
10
             {0, 1, 0, 0},                // Step 2
11
             {0, 0, 1, 0},                // Step 3
12
             {0, 0, 0, 1}};                // Step 4
13

14

15
void SPI_SlaveInit(void);
16
char SPI_Exchange(void);
17
void moveStepper(char s, float delayValue);
18
void action(char count,float delayValue);
19

20
char main()
21
{
22
  SPI_SlaveInit();                      
23
  char data;
24
  
25
  
26
  while(1)
27
    {  
28
      data = SPI_Exchange()   
29
      action(data, 3.125);
30
        
31
      
32
    }
33
  
34
}
35

36
void SPI_SlaveInit(void)
37
{
38
  DDRB |= (1<<PB4);                     
39
  PORTD |= (1<<PD0)|(1<<PD1);                 
40
  DDRD |=(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5);          
41
  SPCR = (1<<SPE);                    
42
}
43

44
char SPI_Exchange(void)
45
{
46
  char data;
47

48
  while(!(SPSR & (1<<SPIF))) 
49
  {}
50

51
  data = SPDR;
52
  SPDR=0x00;
53
  return data;
54
}
55

56
void moveStepper(char s, float delayValue)
57
      {  
58
        
59
        
60
        PORTD &= ~( ( 1 << PD2 ) | ( 1 << PD3 ) | ( 1 << PD4 ) | ( 1 << PD5 ) );//Pins 2, 3, 4, 5 löschen!
61
        
62
        PORTD |= ( 1 << ( s + PD2) );                       //Nur den entsprechenden Pin setzen!
63
        PORTD |= ( 1 << ( s + PD3) );
64
        PORTD |= ( 1 << ( s + PD4) );
65
        PORTD |= ( 1 << ( s + PD5) );
66
        _delay_ms(delayValue);                                 //Pause von 3.125
67
      }
68
      
69
void action(char count, float delayValue)                          
70
      {  char i=0,sequenceStep;
71
        
72
        if(count > 0)                              
73
        for( i = 0; i < count; i++)
74
        
75
        for(sequenceStep = 1; sequenceStep <= 4; sequenceStep++)
76
        moveStepper(sequenceStep, delayValue);
77
        
78
        if(count < 0)                              
79
        for( i = 0; i < ~(count); i++)
80
        for(sequenceStep = 4; sequenceStep > 0; sequenceStep--)
81
        moveStepper(sequenceStep, delayValue);
82
        
83
        if(count == 0)                              //Stromlos schalten
84
        moveStepper(0, delayValue);
85
      }

Es tut sich aber nichts habe LEDS an den jeweiligen ausgängen.

Ist es vielleicht besser einfach RX/TX zu nehmen da ich natürlich ein 
Problem bekomme bei negativen werten und dann mit High-Byte und Low-Byte 
arbeiten muss??

Ich hoffe ihr könnt mir helfen danke schon mal im vorraus!!

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.