PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tierische Probleme mit SPI an Atmega32



Tech_stevens
23.06.2009, 19:51
Hallo zusammen,

ich bin hier im Forum so neu wie in der Programmierung mit C :-) und habe auch gleich ein großes Problem!

Ich bekomme keine saubere Kommunikation zwischen zwei Atmegas hin.

Die Aufgabe ist eigentlich einfach.
Ein Controller misst Abstände über drei Ultraschallsensoren (SRF04) und sendet die Messergebnisse (Differenz aus Timer-Startwert und Timerzählstand bei Interrupt) an den Slave-Controller, der ein Fahrwerk steuert. Ist der gemessene Abstand kleiner 6cm, sollen die Maschinen stoppen, ansonsten starten.

Kurz zur Konfiguration:

Mastercontroller (Steuerung.c)
================

PA0 bis PA2 --> Triggerausgänge Ultraschallsensoren
PC5 bis PC7 --> Echoeingänge Ultraschallsensoren

Slavecontroller (Fahrwerk.c)
===============

PB3 --> PWM-Ausgang Maschine 1
PD7 --> PWM-Ausgang Maschine 2

Beide Controller sind über SPI miteinander verbunden.

Das Problem:

Aus einem mir nicht verständlichen Grund kommen die gesendeten Bytes auf
dem Slavecontroller teilweise in einer anderen Reihenfolge an. Ich
vermute, dass Bytes "verschluckt" werden, also verloren gehen.
Den Grund dafür habe ich nicht gefunden. Und weiter weiss ich leider
auch nicht mehr.

Mache ich da offensichtlich was verkehrt, oder steckt der Teufel im Detail?

Ich hoffe, mir kann jemand helfen!

Danke für jeden Hinweis!!!!

Dennis

panier
25.06.2009, 08:05
Hallo, das klingt, als ob die Sendebytes schneller ins USART Register (bzw. Shift Out Register UCSRA) geschrieben werden, als diese gesendet werden können.
Einfacher Test dafür: Baudrate erhöhen
Viel Erfolg

Ceos
25.06.2009, 08:15
das ist SPI und nicht uart, das arbeitet synchron und wenn das SPIF flag gesetzt ist, ist die übertragung auch ausgeschlossen ... ich hab zur zeit viel zu tun sonst würd ich mir dein code genauer anschauen, aber das was ich gesehen habe sieht ok aus ... in meinen augen liegt das problem irgendwo in nem kleinen detail das ich übersehen habe oder eventuell in der elektronik, wie haste die controller denn verbunden ? (welche distanz)

das einzige was mir im code auffällt, du hast die slaveleitung vom SPI-slave nicht auf ausgang ... obwohl ich mir grad nicht sicher bin, ob das im slave modus nu miso oder mosi sein muss