Pages: [1]   Go Down
Author Topic: FM Radio von Sparkfun  (Read 774 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,
ich hab mir von Sparkfun dieses FM shield geholt : https://www.sparkfun.com/products/10342?

läuft auch auf meinem UNO ohne Probleme, aber nicht auf meinem Mega. Ich kann mir nicht erklären warum.

Ich hab in den skatch zwei Marken eingebaut um zu sehen wo es hängt. Die "Test1" ereicht er noch, die "Test2" nicht mehr.
Also muss ja der Fehler in der zeile
Code:
radio.begin(FM);
liegen.
Hat jemand ne Ahnung warum? Und warum nur beim MEGA?

Code:
//Add the Si4735 Library to the sketch.
#include <Si4735.h>

//Create an instance of the Si4735 named radio.
Si4735 radio;

void setup()
{
  //Create a serial connection
  Serial.begin(9600);
Serial.print("test1"); //**********************************erste Marke wird noch erreicht*********************
  //Initialize the radio to the FM mode (Possible modes are AM, FM, SW, LW).
  //The mode will set the proper bandwidth. Ensure that the antenna
  //switch on the shield is configured for the desired mode.
  radio.begin(FM);
Serial.print("test2");// *********************************zweite Marke nicht mehr *******************
  //Set the FM Frequency to 97.3 MHz
  radio.tuneFrequency(9650);
}

void loop()
{      
  //Wait until a character comes in on the Serial port.
  if(Serial.available()>0){
    //Decide what to do based on the character received.
    switch(Serial.read()){
      //If we get the number 8, turn the volume up.
      case '8':radio.volumeUp();
        break;
      //If we get the number 2, turn the volume down.
      case '2':radio.volumeDown();
        break;
      //If we get the number 4, seek down to the next channel in the current bandwidth (wrap to the top when the bottom is reached).
      case '4':radio.seekDown();
        break;
      //If we get the number 6, seek up to the next channel in the current bandwidth (wrap to the bottom when the top is reached).
      case '6':radio.seekUp();
        break;
      //If we get the letter m, mute the radio.
      case 'M':
      case 'm':radio.mute();
        break;
      //If we get the letter u, unmute the radio.
      case 'U':
      case 'u':radio.unmute();
        break;
      //If we get the letter s, print the current status of the radio.
      case 'S':
      case 's':Serial.print((unsigned char)radio.getStatus());
      default:
        break;
    }
  }  
}

« Last Edit: February 26, 2013, 06:55:11 pm by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
probier es mal so

radio.begin(FM);
radio.tuneFrequency(9730);

Gruß GKar

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wo ist der unterschied?
mal abgesehen von der Startfrequnz? ich hab halt was genommen das es bei uns wirklich gibt.
bis dahin kommt das programm ja garnicht weil es sich davor schon aufhängt.

es ist übrigens das original bsp. programm vom hersteller.

ich hab auch noch nicht kappiert wiso es mit dem UNO läuft aber nicht mit dem MEGA
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20280
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Dev/Arduino/Shields/SI4735%20Shield-v12.pdf
Das Shield wird über das SPI Interface angesteuert. Der Mega hat das SPI-Interface aber nicht auf den pins 11, 12, und 13.
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 12
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Das Shield wird über das SPI Interface angesteuert. Der Mega hat das SPI-Interface aber nicht auf den pins 11, 12, und 13.

Das war der entscheidende Hinweis. Es ist aber nicht nur 11, 12 und 13, sondern auch noch 10, hab sie umverdrahtet auf 50, 51, 52 und 53 und das Programm läuft weiter. Jetzt muss ich nur noch Sound raus bekommen :-).

Vielen Dank für eure Hilfe, ....... schon wieder *lol*
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 236
Posts: 20280
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein, pin 10 ist kein Teil des SPI Interfaces sondern der SS oder CS Pin. Dieser wird mehr oder weniger statisch gesetzt und bestimmt den aktiven Baustein am SPI. Jeder SPI Baustein braucht seinen eigenen CS Pin. Es kann man jeden Pin des Arduino als CS genommen werden.

Codebeispiel: von http://arduino.cc/en/Tutorial/BarometricPressureSensor

Code:

  digitalWrite(chipSelectPin, LOW);

  SPI.transfer(dataToSend); //Send register location
  SPI.transfer(thisValue);  //Send value to record into register

  digitalWrite(chipSelectPin, HIGH);

Der CS-Pin wird vor dem Transfer auf LOW gesetzt (Baustein ausgesucht) und nach dem Transfer mittels der SPI - Bibliothek wieder durch HIGH setzen deaktiviert.

Grüße Uwe
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2752
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
pin 10 ist kein Teil des SPI Interfaces

( Uwe, darf ich bitte etwas klugscheissern. Du hast zwar Recht, das ist allerdings nicht die ganze Antwort : )
Pin 10 beim UNO steuert, ob der Arduino selbst Master oder Slave bei SPI ist, d.h. es ist der SS des UNO als SPI Slave, wenn er auf Input steht.

Ist er Output, ist der UNO der SPI Master, und er kann Pin 10 und/oder beliebig andere als SS Pins für  SPI Slaves  HIGH / LOW setzen.

-- Beim Mega ist übrigens Pin 53 der SS für den Arduino als Slave

http://arduino.cc/en/Reference/SPI
Logged

Pages: [1]   Go Up
Jump to: