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
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?
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
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
Lesezeichen