- 3D-Druck Einstieg und Tipps         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 25 von 25

Thema: Kommunikation zwischen mehreren µC

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    26.08.2006
    Beiträge
    84
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Siehe unbenannt2:
    Mega1 als I2C Master, Mega2 als slave.
    Alle paar ms Mega1 den Mega2 pollen lassen, dabei Daten zur Bedieneinheit schicken und Zustand der Bedieneinheit abfragen.

    Zum Abfragen der Bedieneinheit alternativ eine Leitung vom Mega2 zu einem der Ints am Mega1 legen und die bei Bedarf low/high ziehen um Zustandsänderung zu signalisieren und dann Zustand der Bedieneinheit abfragen.

    Xbee(seriell?)/Gps je eine USART, im Zweifelsfall nen AtMega644p (2x USART) nehmen und die Idee mit den Soft UARTs besser gleich vergessen, lieber die Ints der USARTs nutzen. Die TWIs ebenfalls per Int nutzen. Das Ganze dann schön um eine zentrale Schleife mit globalen Variablen als Signale verpacken.

    Dabei wirst du aber nicht daran vorbeikommen dich mit Timern, den USARTs, der TWI und einigen anderen Dingen, am Besten ohne fertige Libs, auseinanderzusetzen. Aber der Weg ist ein Teil des Ziels, oder?

    Nur so eine Idee...

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von MiniMax
    also ist die soft UART lösung quatsch! Gibt es noch ne bessere Lösung?
    GPS Empfänger sind bekanntlich nicht besonders schnell und Aktualisieren ihre Werte 4....10 x/s
    mit üblich 2400 Baud. Da langweilt sich jede Soft Schnittstelle gewaltig......Wozu wird dabei 240.000
    Baud gebraucht???

    Außerdem, ist es absolut sinnfrei ein DGPS selber bauen zu wollen. Dazu müssen zur gleichen Zeit die Daten von identischen Satelliten verglichen werden. Das bedeutet nicht nur die Empfänger müssen synchron laufen, sie müssen auch synchron den gleichen Satelliten empfangen.....wenn das SOOOO einfach wäre würden solche Systeme nicht im 5 Stelligen Preisbereich liegen.

    Viel Spass beim Basteln.

    Gruß Richard

  3. #23
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    Zitat Zitat von Richard
    ...Dazu müssen zur gleichen Zeit die Daten von identischen Satelliten verglichen werden. Das bedeutet nicht nur die Empfänger müssen synchron laufen, sie müssen auch synchron den gleichen Satelliten empfangen...
    Hallo Zusammen,

    @Richard: Ich muss ja nur einmalig eine GPS Position für die Ground station bekommen und dann nur noch von dem Modell!


    Zitat Zitat von Slein
    Mega1 als I2C Master, Mega2 als slave.
    Alle paar ms Mega1 den Mega2 pollen lassen, dabei Daten zur Bedieneinheit schicken und Zustand der Bedieneinheit abfragen.

    Zum Abfragen der Bedieneinheit alternativ eine Leitung vom Mega2 zu einem der Ints am Mega1 legen und die bei Bedarf low/high ziehen um Zustandsänderung zu signalisieren und dann Zustand der Bedieneinheit abfragen.

    Xbee(seriell?)/Gps je eine USART, im Zweifelsfall nen AtMega644p (2x USART) nehmen und die Idee mit den Soft UARTs besser gleich vergessen, lieber die Ints der USARTs nutzen. Die TWIs ebenfalls per Int nutzen. Das Ganze dann schön um eine zentrale Schleife mit globalen Variablen als Signale verpacken.
    Also benutze ich den Rechen mega als main mega. Dann frage ich in der Main erst das GPS ab, rechne den winkel aus und stelle die Motoren. Dann frage ich noch die Bedineinheit ab und sende daten hin. Das Bedeutet Mega1 zu Mega2 per I2C und dann die GPS Daten per RS232 zum main Mega. Kannn ich denn über den I2C bus Strings senden? Die GPS Koordinaten usw? Und wie kann ich den Steuer Mega als I2C Slave laufen lassen?
    Gruß
    MiniMax

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    26.08.2006
    Beiträge
    84
    Zitat Zitat von MiniMax
    Also benutze ich den Rechen mega als main mega. Dann frage ich in der Main erst das GPS ab, rechne den winkel aus und stelle die Motoren. Dann frage ich noch die Bedineinheit ab und sende daten hin. Das Bedeutet Mega1 zu Mega2 per I2C und dann die GPS Daten per RS232 zum main Mega. Kannn ich denn über den I2C bus Strings senden? Die GPS Koordinaten usw? Und wie kann ich den Steuer Mega als I2C Slave laufen lassen?
    Jain.
    die meisten GPS Empfänger geben 1x pro Sekunde Positionsdaten aus (oder können so konfiguriert werden). Die USART kann nun einen Int auslösen, sobald ein byte empfangen wurde. In der ISR wird dann der String byte für byte zusammengebaut, bei CR/LF dann die CRC überprüfen und eine globale Variable auf 'neue GPS Nachricht empfangen' setzen. in der Main Schleife dann halt überprüfen, ob eine neue GPS Nachricht da ist und ggfs. die Position extrahieren. Da der Mega644p 2 USARTS hat, kann man so im Hintergrund beide GPS Positionen zusammensammeln. Wenn neue Position eingegangen ist die Servos stellen.

    Per Timerinterupt alle 250ms den Mega2 bearbeiten. Ein sei() am Anfang dieser ISR bewirkt, daß auch während dieser ISR Bytes von den GPS emfangen werden. Auch hier wieder eine globale Variable um Änderungen in der Bedieneinheit/Mega2 zu signalisieren.

    Per I2C kannst du senden/lesen was du willst.

    Da die Soft-Uart mit Warteschleifen arbeiten, kommst du damit bei 2x GPS nicht weit, da der komplette uC blokiert ist, solange du an einer Schnittstelle was empfängst.

    Versuch meinen ersten Absatz zu verstehen und die Vorteile, die der asynchrone Empfang damit bringt. Kann sowas schwer erklären... in der Mainschleife halt wirklich nur Nachrichten der Subysteme bearbeiten, sonst kommt das mit dem Timing nicht hin und du verlierst Nachrichten vom GPS.

    Wie gesagt, siehe unbenannt2, nur 2 Megas. Mega1 als Hauptrechner für 2x GPS, 2x Servo. Mega2 als Schnittstelle zur Bedieneinheit, PC. Vom Mega2 immer einen festen Block lesen und einen anderen festen Block in den Mega2 schreiben, jeweils mit allen relevanten Daten (GPS, Tasten...).

    Alternativ könnte Mega1 auch nur dann was in den Mega2 schreiben, wenn wirklich was neues vorliegt. Dann könnte man den Mega2 auch ein Signal an den Mega1 schicken lassen (eine Leitung auf low/high), wenn sich bei ihm was neues ergeben hat...

    Die ganze Geschichte bedingt aber wirklich eine intensive Auseinandersetzung mit den Möglichkeiten des AVR.

    Was für GPS-Empfänger hast du eigentlich?

  5. #25
    Erfahrener Benutzer Roboter-Spezialist Avatar von MiniMax
    Registriert seit
    26.07.2007
    Ort
    Bremen
    Beiträge
    241
    Also wenn ich dich richtig Verstehe, meinst du dass so:
    (Mega 1 = main, Mega2 = bedinteil, Gps = Gps --> Xbee)

    - Mega1 fängt an
    - Mega1 fragt GPS koordinaten von GPS ab
    - Mega1 rechnet Winkel aus
    - Mega1 stellt Schrittmotoren
    - Mega1 fragt Mega2 auf neuigkeiten ab (wenn port auf heigh)
    - Mega1 sagt Mega2 neue Daten (Winkel kurs) (wenn neu)

    Alles von Vorne

    Und dass in der Normalen do loop end schleife?
    Gruß
    MiniMax

Seite 3 von 3 ErsteErste 123

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress