AdSense

Sonntag, 26. Mai 2013

ATmega - Hardware-SPI

(English version) SPI-Kommunikation kann ziemlich praktisch sein (z.B. um einen Raspberry PI mit ATMegas um weitere Digitalkanäle zu erweitern). Für das SPI-Interface am ATMega8 habe ich jedoch kaum Informationen gefunden, daher hier der Code, welchen ich nach langem Zusammensuchen hatte. Die einzelnen Funktionen sollten selbsterklärend sein:

void SPI_SlaveInit(void)
{
  DDRB |= (1<<PORTB4);//Set MISO to output
  SPCR = (1<<SPE);
}

char SPI_SlaveReceive(void)
{
  char data;
  while(!(SPSR & (1<<SPIF)))
  {}
  data = SPDR;
  SPDR = 0;
  return data;
}

void SPI_SlaveSend(char data)
{
  SPDR = data;
  while(!(SPSR & (1<<SPIF)))
  {}
  SPDR = 0;
}

5 Kommentare:

  1. Welches Header File wurde benutzt zur Definition von SPE, PORTB4,SPIF?

    AntwortenLöschen
    Antworten
    1. Ich benutze das AVR Studio, da gibt es dann avr/io.h, da sollte alles drin sein.

      Löschen
    2. Ich habe versucht alles direkt im RPI zu bauen also ohne AVR Studio
      http://www.instructables.com/id/Programming-the-ATtiny85-from-Raspberry-Pi/

      avr/io.h ist zwar eingebaut aber die Konstanten werden in diesem Setup dennoch nicht gefunden

      Löschen
    3. Damit habe ich mich leider noch nie auseinander gesetzt. Einerseits könnte es sein, dass bei dem ATtiny ein paar Konstanten nicht so sind wie beim ATmega, andererseits könnte es auch sein, dass die avr/io.h nicht dieselbe ist, welche im AVR Studio benutzt wird.

      Löschen
    4. Schade in der Community rund um den RPI versucht man schon etwas länger die RGB LED WS2812 zum spielen zu bringen. Auf direkten Weg ist das noch nicht gelungen aber mit dem ATtiny85 als Interface funktioniert es sicher. Jetzt fehlt eben nur noch ein SPI Interface

      Mit deiner Arbeit dachte ich an folgende Lösungsschritte
      1) ATtiny85 chip source: ATtiny85 from https://guloshop.de/shop/Mikrocontroller/ATtiny85::16.html?XTCsid=mfji8lnvqtmkg01g3terp60se7
      2) http://www.instructables.com/id/Programming-the-ATtiny85-from-Raspberry-Pi/
      Programming the ATtiny85 from Raspberry Pi
      3) https://github.com/cpldcpu/light_ws2812
      This is a small Ansi-C library to control WS2811/WS2812 based RGB Leds and strings.

      Löschen