www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega644 /64 SPI


Autor: Frank Scherler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: AVR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hat irgendjemand eine Idee?

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

Autor: Frank Scherler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Kleinwort (_sk_)
Datum:

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

Gruß, Stefan

Autor: Werner B. (Gast)
Datum:

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

Autor: Frank Scherler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk Doerr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Scherler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan Grünloh (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Scherler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.