mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega128 + CC2420 konfiguration über SPI


Autor: d-roehrig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich bin dabei eine Sniffer Funktionalität mittels ATMega128 und CC2420 
zu erstellen. Die UART läuft bereits in beide Richtungen. Ich denke das 
das SPI auch bereits funktionieren sollte, jedoch kann ich es nicht 
testen. (Bin ein Neuling in dem Bereich, vielleicht kennt ihr ja eine 
Möglichkeit)

Nun zu meinem Anliegen. Ich müsste als nächsten Schritt den CC2420 über 
SPI konfigurieren, jedoch weiß ich nicht wie. Aus den Datenblättern für 
den CC2420 sowie dem ATMega128 werde ich auch nicht schlau.

Mein bisheriger Code sieht so aus:
#include <avr/io.h>

#define F_CPU 8388608
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
#define DD_SCK PINB1
#define DD_MOSI PINB2
#define DD_MISO PINB3

void USART_Init( unsigned int ubrr )
{
  
  /* Set baud rate */
  UBRR0H = (unsigned char)(ubrr>>8);
  UBRR0L = (unsigned char)ubrr;

  /* Enable receiver and transmitter */
  UCSR0B = (1<<TXEN0)|(1<<RXEN0);
  
  /* Set frame format: 8data, 2stop bit */
  UCSR0C = (1<<USBS0)|(3<<UCSZ0);
}

void SPI_MasterInit(void)
{
  PORTB = (1<<PORTB4)|(1<<PORTB5);

  /* Set MOSI and SCK output, all others input */
  DDRB = (1<<DD_MOSI)|(1<<DD_SCK);
 
  /* Enable SPI, Master, set clock rate fck/16 */
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}

void USART_Transmit( unsigned char data )
{
  /* Wait for empty transmit buffer */
  while (!( UCSR0A & (1<<UDRE0)));

  /* Put data into buffer, sends the data */
  UDR0 = data;
}

uint8_t USART_Receive(void)
{
    while (!(UCSR0A & (1<<RXC0)));

  return UDR0;
}

void SPI_MasterTransmit(char cData)
{
  /* Start transmission */
  SPDR = cData;

  /* Wait for transmission complete */
  while(!(SPSR & (1<<SPIF)));
}

uint8_t SPI_MasterReceive(void)
{
  return SPDR;
}

int main( void )
{
  USART_Init(MYUBRR);
  SPI_MasterInit();

  while(1)
  {
    USART_Transmit(USART_Receive());
  }

  return 0;
}

Ich hoffe ihr könnt mir helfen ;-)

Vielen Dank im voraus

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äh ... das ist gar keine Initalisierug dabei. Dann ladt Dir mal das 
SmartRF-Studio runter und stell erst mal fest wie du Transceiver 
konfigurieren willst. Wenn Du eine die Initialsierung fertig hast und es 
nicht klappt, dann kann man Dir helfen.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei TI gibts doch eine Appnote mit Quellcodes für den CC2420, die ist 
sowohl auf dem MSP430 als auch auf einem ATMega lauffähig. Da sind in 
den Codes immer Präprozessor-Anweisungen, die das machen.

http://focus.ti.com/analog/docs/techdocsabstract.t...

Die Software wurde von TI ja von ATMega auf den MSP430 portiert.

Autor: d-roehrig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankt euch erstmal für eure antworten...

Aber das verstehe ich noch nicht ganz. Im Datenblatt des ATMega128 steht 
auch etwas über das SPI.

http://www.atmel.com/dyn/resources/prod_documents/...
Seite: 165/166

und dort habe ich auch den Code zu Initialisierung her, wenn es denn 
eine ist :D

Könnt ihr dazu etwas sagen?

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich will Dir ja nicht auf den Schlipps treten, aber meinst Du nicht 
das dieses Projekt ne nummer zu hoch ist. Die SPI-Ansteuerung dürfte das 
wenigste sein. Die Programmierung des Funktransceivers halte ich für 
komplizierte. Ich würde folgendermaßen vorgehen, um die Kommunikation 
sicher zu stellen. Du ließt das Datenblatt des CC2420 und versuchst via 
SPI ein bestimmtes Register z.B. PLL auszulesen. Ist der Wert plausibel 
dann würde als nächste eins beschreiben und wieder auslesen. Stimmen die 
Werte überein, dann hast Du Kommunikation und die Arbeit kann losgehen.

Autor: d-roehrig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube nicht das das Projekt zu groß ist. Ich habe nur leider noch 
nicht mit der SPI gearbeitet, aber Unwissenheit ist keine Ausrede für 
ein zu großes Projekt ;-)

Aber nun weiter zu meinem Problem. Ich habe mich weiterhin mit der SPI 
beschäftigt, aber weiß nicht genau was du damit meinst, dass ich keine 
SPI initialisiert habe. Ich habe lediglich keine libarys zur 
initialisierung genutzt. Nachdem ich eine Adresse über die SPI sende 
bekomme ich immer nur eine 0 zurück. Es scheint so, dass das SPDR gar 
nicht gesetzt wird oder die Daten am CC2420 nicht ankommen.
Zur Eingrenzung des Problems werde ich einfach mal meine durchgeführten 
Schritte posten:

1. Pin belegung zu Ordnen
#define DD_CS PB0    //Selektiert den Master ??kontrollieren
#define DD_SCK PB1    //Takt
#define DD_MOSI PB2    //Master Out, Slave In
#define DD_MISO PB3    //Master In, Slave Out

#define CC_FIFO PE5
#define CC_FIFOP PE6
#define CC_CCA PD5
#define CC_SFD PD4
#define CC_RESET PB6
#define CC_VREG_EN PB7          //VREG Enable
sollte selbsterklärend sein.

2. SPI initialisieren
  DDRB = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_CS);  // Output Pins festgelegt
  PORTB = (0<<DD_MOSI)|(0<<DD_SCK)|(0<<DD_CS); // Pull Up disabled

  /* Enable SPI, Master, set clock rate fck/16 */
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);

3. Register Adresse Senden über:
  /* Start transmission */
  SPDR = cData;

  /* Wait for transmission complete */
  while(!(SPSR & (1<<SPIF)));

Ist das soweit (von der Art wie ich es machen würde) richtig?

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.