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


von Flo S. (agemta)


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!

von holger (Gast)


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.

von Flo S. (agemta)


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.

von holger (Gast)


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.

von Flo S. (agemta)


Lesenswert?

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

von holger (Gast)


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.

von Flo S. (agemta)


Angehängte Dateien:

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.

von holger (Gast)


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;
  }

von Flo S. (agemta)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.