Forum: Mikrocontroller und Digitale Elektronik ATmega644 /64 SPI


von Frank Scherler (Gast)


Lesenswert?

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;
}

von AVR (Gast)


Lesenswert?

>Hat irgendjemand eine Idee?

Ja, Du hast das Datenblatt nicht gelesen.
Erst lesen, dann programmieren.

von Frank Scherler (Gast)


Lesenswert?

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?

von Stefan K. (_sk_)


Lesenswert?

Sehe kein Problem in Deinem Code.
Probier es doch auf dem echten Chip aus. Vielleicht ist es ein
Simulator-Problem.

Gruß, Stefan

von Werner B. (Gast)


Lesenswert?

WO HAST DU DEN 644 HER? Der ist doch eigentlich erst angekündigt.

von Frank Scherler (Gast)


Lesenswert?

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.

von Stefan K. (_sk_)


Lesenswert?

@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

von Dirk Doerr (Gast)


Lesenswert?

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

von Stefan K. (_sk_)


Lesenswert?

@Dirk:
der 644 ist eher zum ATmega32 als zum ATmega64 kompatibel. Es sind ja
auch die Datenblätter 164/324/644 in einem zusammengefasst.

Gruß, Stefan

von Frank Scherler (Gast)


Lesenswert?

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

von Stephan Grünloh (Gast)


Lesenswert?

Hi Werner,

Meine Bezugsquelle für den ATMEGA644 ist Air Electronics:

http://www.trade-shop.de/catalog/

Habe eine Info bekommen, dass die heute 100 Stück ins Lager bekommen
haben. Preis 9,90€. Leider haben die einen Mindestbestellwert von 25€.
Habe mir 3 Stück bestellt.

Gruss
Stephan

von Stefan K. (_sk_)


Lesenswert?

Hi Frank,

wäre nicht schlecht, wenn Du Atmel eine kurze Fehlerbeschreibung
zukommen lassen könntest. Federführend bei der AVRStudio-Entwicklung
sind meines Wissens die Norweger:

http://www.atmel.no/beta_ware/

Schreib denen doch ne kurze Mail mit dem Problem.

Viele Grüße, Stefan

von Frank Scherler (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.