www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI AT Mega48-->AT Mega162 RFM12


Autor: snowfly (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

nachdem ich jetz das ganze Wochenende am Fehlersuchen war wende ich mich 
hoffnungsvoll an euch.

Problem: Den angehängten Code habe ich an einem Mega48 am laufen und der 
funktioniert auch wunderbar, jetzt will ich das auf den inzwischen 
gelieferten AT Mega162 portieren und dort will es einfach nicht 
funktionieren.

Die MAIN LOOP Kontroll LED und die UART Ausgabe machen was sie sollen,
die Interrupt LED ist immer aus und die Kommunikation mit dem RFM läuft 
irgendwie gar nicht.

Das RFM-Modul wird anscheinend nicht initialisiert weil am Tacktausgang 
stehen 1MHz an obwohl es 10MHz nach der Initialisierung sein sollten,
deshalb hängt jetzt ein extra Quarz am AT Mega

Verdrahtungsfehler würde ich ausschliessen, ich hab das inzwischen 
gefühlte 100 mal auf dem Steckbrett gesteckt und das Ergebnis ist immer 
das gleiche.
M48 geht sofort M162 geht nicht.

Fehler im Datenblatt des M162 glaub ich auch nicht weil über die SPI 
schnittstelle ist ja auch der Programmer angeschlossen.


Ich hoffe Ihr habt noch vorschläge wo ichh suchen könnte.

Autor: snowfly (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hat keiner eine Idee?

hier ist nochmal der Code zum direkt ansehen und der Schaltplan.

Ich bin hier echt am Verzweifeln, das muss doch gehen...

AchJa: der Code ist von www.technofun.org und funktioniert auf dem 
Mega48 super.
$regfile = "m162def.dat"
'$regfile = "m48def.dat"
$hwstack = 60
$swstack = 60
$framesize = 60

$crystal = 9830400
$baud = 38400
Baud = 38400



'######################################################
'Settings for RFM12

'word for SPI Tx
Dim Spi_tx_wrd As Word
Dim Spi_tx_l As Byte At Spi_tx_wrd Overlay
Dim Spi_tx_h As Byte At Spi_tx_wrd + 1 Overlay

'word for SPI Rx
Dim Spi_rx_wrd As Word
Dim Spi_rx_l As Byte At Spi_rx_wrd Overlay
Dim Spi_rx_h As Byte At Spi_rx_wrd + 1 Overlay

Dim Rxindex As Byte
Dim I As Byte

Dim Rxbuf(31) As Byte
Dim Rxmsg As String * 28 At Rxbuf(1) Overlay

Dim Rxmsgflg As Bit

'**** Change Alias's to match your hardware. ****
'AT Mega 162
Rfm12_cs Alias Portb.4
Config Rfm12_cs = Output
Set Rfm12_cs

Rfm12_sdi Alias Portb.5
Config Rfm12_sdi = Output

Rfm12_sdo Alias Pinb.6
Config Rfm12_sdo = Input
Set Portb.6

Rfm12_sck Alias Portb.7
Config Rfm12_sck = Output

'AT Mega 48
'Rfm12_cs Alias Portb.2
'Config Rfm12_cs = Output
'Set Rfm12_cs

'Rfm12_sdi Alias Portb.3
'Config Rfm12_sdi = Output

'Rfm12_sdo Alias Pinb.4
'Config Rfm12_sdo = Input
'Set Portb.4

'Rfm12_sck Alias Portb.5
'Config Rfm12_sck = Output

Config Int0 = Falling
On Int0 Isr_int0
Enable Int0
'######################################################

'Kontroll LED
Led Alias Portd.6
Config Pind.6 = Output

Led2 Alias Portd.4
Config Pind.4 = Output

'######################################################


'config SPI for RFM12
'Config Spi = Soft , Din = Pinb.6 , Dout = Portb.5 , Ss = Portb.4 , Clock = Portb.7 , Spiin = 0
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 64
Spiinit
'######################################################


'Los gehts
Gosub Rfm12_init
Gosub Rfm12_restart_synchron

Enable Interrupts
   Spi_tx_wrd = 0
   Gosub Rfm12_spi_wrt



'######################################################
'###              Hauptschleife                     ###
'######################################################

Do
   'If A Message Is Ready Then Print It Out.
   If Rxmsgflg = 1 Then
    Rxmsgflg = 0
    Print Rxmsg
    Rxmsg = ""
   End If


   'Toggle Led
   Waitms 200
   Toggle Led2
   Waitms 200
   Toggle Led2
   Waitms 800
   Toggle Led2
   Waitms 300
   Toggle Led2
   Print "hallo welt"
   Print Bin(spcr)
   Print Bin(ddrb)
   Print Bin(ddrd)

   'any user code can be added here.
Loop



'######################################################
'###                ISR und Subs                    ###
'######################################################

Isr_int0:
Toggle Led                                                  'Kontroll LED ein während empfang
   Spi_tx_wrd = 0                                           'get status word from RFM12.
   Gosub Rfm12_spi_wrt
   If Spi_rx_wrd.15 = 1 Then                                'check FFIT bit in status word.
      Spi_tx_wrd = &HB000                                   'get Rx byte. will be in SPI_Rx_L
      Gosub Rfm12_spi_wrt

      If Rxindex < 28 Then Incr Rxindex                     'save byte in RxBuf() , don't over run array bounds.
      Rxbuf(rxindex) = Spi_rx_l

      If Spi_rx_l = 0 Then                                  'if last byte is 0 (null).message is ready
         Rxindex = 0
         Rxmsgflg = 1                                       'set message ready flg.
         Gosub Rfm12_restart_synchron
      End If
   Else                                                     'for any other interrupt just print the status word for now.
      Print Hex(spi_rx_wrd)
   End If
Toggle Led                                                  'Kontroll LED aus nach empfang
Return

Rfm12_spi_wrt:                                              'Send word (SPI_Tx_wrd) to RFM12.Also receive word (SPI_Rx_wrd).
   Reset Rfm12_cs                                           'RFM12 Chip select
   Spi_rx_h = Spimove(spi_tx_h)                             'send hi byte.
   Spi_rx_l = Spimove(spi_tx_l)                             'send lo byte.
   Set Rfm12_cs                                             'deselect chip.
Return

Rfm12_restart_synchron:
   Spi_tx_wrd = &HCA81
   Gosub Rfm12_spi_wrt
   Spi_tx_wrd = &HCA83
   Gosub Rfm12_spi_wrt
Return

Rfm12_init:                                                 'Initialize RFM12
   Restore Init_data
   For I = 1 To 11
      Read Spi_tx_wrd
      Gosub Rfm12_spi_wrt                                   'send init data to RFM12.
      Waitms 30
   Next
Return

Init_data:
Data &HC0E0%                                                'ClockDiv/Battlow.
Data &H80D7%                                                '433mhz band,Enable Tx reg.,Enable Rx FIFO
Data &H82D8%                                                'Enable Rx, crystal osc., Synth.
Data &HA620%                                                '435mhZ
Data &HC610%                                                '19kbps
Data &H9184%                                                'Rx settings.
Data &HCED4%                                                'synchron pattern = D4                                              'AFC settings.
Data &HC4A7%.                                               'AFC settings.
Data &H9850%                                                'Tx 90khz deviation.
Data &HCC17%                                                'PLL settings.
Data &HC2ED%                                                'Data Filter settings.

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.