www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI Master sendet nur alle Sekunde?


Autor: Flo S. (agemta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Bastler

Ich habe ein TWI zwischen 2 µC (ATMega32 und ATMega8) aufgebaut. Dazu 
habe ich den Quellcode von Manfred Langemann genutzt (C++). Ist es 
normal das die Daten immer nur alle Sekunde gesendet werden? Die 
berechnete Frequenz liegt bei 100000 Hz. also eigentlich schnell genug. 
Aber zwischen dem senden ist immer eine so lange Pause. Bis auf eine 
50ms Pause nach dem senden habe ich keine Verzögerungen im Programm.

Meine Einstellungen des TWI:
Funktionsaufruf:  - TWIM_Init (100000)
die Funktion:

uint8_t TWIM_Init (uint32_t TWI_Bitrate)
  {
  TWBR = 0x10;
  if (TWBR < 11) return FALSE;
  return TRUE;
  }

Schon vielen Dank an euch!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ist es normal das die Daten immer nur alle Sekunde gesendet werden?

Wenn du eine Sekunde Pause machst ist das normal.
Nimm die Pause doch raus.

Autor: Flo S. (agemta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bis auf eine 50ms Pause nach dem senden habe ich keine Verzögerungen im Programm.

50ms ist nicht eine Sekunde.
Da muss irgendwo anders ein Fehler sein.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>50ms ist nicht eine Sekunde.

Das ist wohl wahr.

>Da muss irgendwo anders ein Fehler sein.

CKDIV8 Fuse? Dann kommst du aber auch erst auf 400ms.

Autor: Flo S. (agemta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das Fuse ist nicht gesetzt.. Beide µC laufen auf 8Mhz mit dem internen 
Quarz.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>das Fuse ist nicht gesetzt..

Ganz sicher? Fuse vieleicht doch falsch programmiert?

> Beide µC laufen auf 8Mhz mit dem internen
>Quarz.

Es gibt keinen internen Quarz.

Autor: Flo S. (agemta)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab noch mal gemessen. Die Pause ist doch länger als ich dachte. Es 
sind so ca. 3s. Das kommt nicht durch Fuse Bits. Da ist Software 
technisch ein Fehler.
Hab mal mein Programm angehängt. Vllt hilft das.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
for (;;)
  {
        receive(); //Wird hier vieleicht 3s gewartet?

      Delay_ms (50); //Oder ist diese Routine faul?

Speck dein Programm mal ab! Und dann teste noch mal.

Wo bitteschön wird hier TWI_Bitrate verwendet?

uint8_t TWIM_Init (uint32_t TWI_Bitrate)
  {
/*
** Set TWI bitrate
** If bitrate is too high, then error return
*/
  TWBR = 0x10;
  if (TWBR < 11) return FALSE;

  return TRUE;
  }

Autor: Flo S. (agemta)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es funktioniert. Es lag an einer falschen Header Datei. Die Version von 
delay.h die ich hatte , war falsch.
Jetzt sendet er ca. 30 mal in der Sekunde.
Vielen Dank für euere Hilfe.

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.