www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuerung eDIP 240-7 mit AT90CAN über SPI klappt nicht


Autor: josh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche schon leicht verzweifelt ein eDIP 240-7 über SPI 
anzusteuern. Ich benutze das STK500 /STK 501 und einem AT90CAN128. Zum 
Programmieren benutze ich das AVR Studio 4.16.
Ich bin gerade dabei mich in die Materie einzuarbeiten, d.h. ich habe 
mir den Code zusammenkopiert und so verändert, das er hoffentlich 
funktioniert.

Am Display habe ich folgende Pins angeschlossen:

PIN  1  = GND
PIN  2  = VDD
PIN  5   = VDD
PIN  6  = CS (PB0)
PIN  7  = MOSI (PB2)
PIN  8  = MISO (PB3)
PIN  9  = CLK (PB1)
PIN 11 = GND

Der Code sieht in etwa so aus:

#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#define P_CS     PB0
#define P_SCK    PB1
#define P_MOSI   PB2
#define P_MISO   PB3
#define PORT_SPI PORTB
#define PORT_CS  PORTB
#define DDR_SPI  DDRB
#define DDR_CS   DDRB

void SPI_MasterInit(void)
{
    // Aktivieren der Pins für das SPI Interface
  DDR_SPI |= (1<<P_SCK)|(1<<P_MOSI);
  PORT_SPI &= ~((1<<P_SCK)|(1<<P_MOSI)|(1<<P_MISO));

  DDR_CS |= (1<<P_CS);
  PORT_CS  |= (1<<P_CS);


SPCR =     (1 << MSTR) | /* Master mode */
           (1 << SPE)  | /* SPI Enable */
           (1 << DORD) | /* Data Order: LSB first */
           (1 << CPOL) | /* Clock Polarity: SCK High when idle */
           (0 << CPHA) | /* Clock Phase: sample on rising SCK edge */
           (1 << SPR1) | /* Clock Frequency: f_OSC / 64 */
           (0 << SPR0);
           SPDR = 0xff;
}

uint8_t spi_putc( uint8_t data ) {

    PORT_CS &= ~(1<<P_CS);
    SPDR = data; // Sendet ein Byte

    // Wartet bis Byte gesendet wurde
    while( !( SPSR & (1<<SPIF) ) );

    PORT_CS |= (1<<P_CS);
    _delay_us(15);
    return SPDR;

}
void test()
{
  spi_putc(0x11);
  spi_putc(0x01);
  spi_putc(0x43);
  spi_putc(0x55);
  spi_putc(0x00);
}

int main(void)
{
SPI_MasterInit();

while(1)
  {
    test();
   }
}

Ich habe jetzt schon verschiedene Sachen versucht zu senden, wie z.B. 
versucht eine Linie zu Zeichnen oder das Display auszuschalten. Wenn ich 
mir das ganze mit dem Oszi anschaue sieht es auch aus, als ob die Daten 
richtig auf dem Bus liegen. Trotzdem bekomme ich nichts anderes als ein 
blinkenden Cursor auf meinem Display zu sehen.
Hat jemand vielleicht eine Idee wo das Problem liegt?
Schon mal vielen Dank

Josh

Autor: josh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok Fehler gefunden.

(0 << CPHA) | /* Clock Phase: sample on rising SCK edge */

CPHA muss (1 << CPHA) sein.

Danke Tim!!

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.