ATmega644 /64 SPI

Gast #309238
Hallo zusammen

ich versuche mit AVRStudio 4.12 und WinAVR bei einem ATmega644 das SPI
interface zum Ticken zu bekommen. Vorerst im Simulator. Jetzt stellt
sich aber das Problem ein, dass das SPI Masterbit sofort nach dem
setzen wieder gelöscht wird. /SS ist sowohl als Ausgang Konfiguriert
als auch "High".
Nun dachte ich mir, das liegt sicherlich an dem neuen ATmega644 und hab
deswegen auf den ATmega64 umgestellt. Ergebnist: Das gleiche.
Seltsamerweise funktioniert der Code, wenn ich auf einen ATmega32
stelle.
Hat irgendjemand eine Idee?

Hier der Code:

#include <avr/io.h>
#include <avr/interrupt.h>
#include "solar.h"

extern void init_LCD(void);

int main(void)
{
  int   i;
  char  c;

  // Port Initialisierung
  DDRA   = 0x00;
  DDRB   = 0x00;
  DDRC   = 0x00;
  DDRD   = 0x07;
  PORTA = 0x00;
  PORTB = 0x10;
  PORTC = 0x00;
  PORTD = 0x07;

  //SPI initialisierung
  //SPI Master, fosc/128
  DDRB   = (1<<PB5) | (1<<PB7) | (1<<PB4);
  PORTB = 0xB0;
  PRR0  = PRR0 & 0xFF^(1<<PRSPI);
  SPCR0  = (1<<SPE0) | (1<<MSTR0) | (1<<CPOL0) | (1<<CPHA0) |(1<<SPR01) 
|
(1<<SPR00);
  SPSR0  = (1<<SPI2X0);  // Hier ist MSTR schon wieder '0'

  init_LCD();

  while(1)
  {
  }

  return 0;
}
Gast #309240
Mann Super! Das ist genau das was ich erhofft habe zu bekommen. Wenn
euch die Antwort zu einfach ist, seid einfach still.

Ich bin der Meinung, dass ich die Doku gelesen habe. Was genau hab ich
denn übersehen?
Gast #309243
Hallo

@Stefan:
Danke für Deine Idee. Hat leider nicht geholfen. An den SPI-Pins tut
sich gar nichts. Ich werde noch mal weiter suchen. Hat jemand soch mal
unterschiede zwischen ATmega32 und ATmega64 bemerkt? Mit einem ATmega
32 funktioniert es nämlich.

@Werner
Ich hab ein paar Muster über einen Freund bekommen. Der IC ist aber
nach meinen Informationen voll in Produktion. Die 324 und 164 fehlen
noch.
#309244
@Frank?

Hast Du eine Debug-Möglichkeit oder brennst Du den mc nur auf
Verdacht?

Macht init_lcd() ev. Probleme - welche Ports benutzt die Funktion?

Welchen Pegel kannst Du an /SS messen? Wenn DU im Simulator arbeitest:
verifiziere, dass /SS asl Ausgang bzw. High geschaltet ist.

Wie steht das WCOL-Bit vor/nach dem Initialisieren? Ev. kann es was
bringen, das WCOL-Bit zurückzusetzen, z.B. mit:

volatile uint8_t dummy;
...
  SPCR0  = (1<<SPE0) | (1<<MSTR0) | (1<<CPOL0) |
           (1<<CPHA0) |(1<<SPR01) | (1<<SPR00);
  SPSR0  = (1<<SPI2X0);

  dummy  = SPSR;         // setzt WCOL-Bit zurück
  dummy =  SPDR;

  SPCR0  = (1<<SPE0) | (1<<MSTR0) | (1<<CPOL0) |
           (1<<CPHA0) |(1<<SPR01) | (1<<SPR00);
  SPSR0  = (1<<SPI2X0);


Viele Grüße, Stefan
Gast #309245
Hi!

Ich bin mir nicht ganz sicher ob es daran liegt, aber wenn ich mir die
Datenblätter ansehe liegen die SPI Pins beim 64er (PB 0 - 3) auf
anderen Ports als beim 32er (PB4-7).

Gruß

     Dirk
Gast #309247
Hallo zusammen.

Ich hab den Fehler! Es steckt doch nur im Simulator! Bei meinen
Versuchen mit dem realen IC muß ich einen anderen Fehler gemacht
haben.

Nun zu Fehler beschreibung. Es ist wahr, dass der ATmega644 eher zum
ATmega32 verwand ist. Der SPI Port ist beim 644 gleich dem vom 32er.
Jetzt haben die für den Simulator anscheinend den 64er zum Vorbild
genommen. Soll heißen /SS ist beim 644er auf PB4, beim 64er ist es PB0.
wenn ich in meinem Programm den PB0 auch als Ausgang schalte
funktioniert alles.
Dumme Sache. Hat viel Zeit gekostet.

Danke für eure Hilfe!!!!

Gruß
 Frank
Gast #309250
Hallo Stefan,

ich hab gestern schon ne Mail über den normalen Support-Kanal
geschickt. Fürs nächste Mal nehme ich dann den von Dir genannten. Den
kannte ich bisher noch nicht.

Gruß
 Frank

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.