- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 24 von 24

Thema: TWI stört meinen Interrupt zur Frequenzmessung

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Anzeige

    Powerstation Test
    War unpräzise ausgedrückt von mir. Gemessen wird schon, aber eben die Werte u.u nicht abgeholt. ZB 1=1.Flanke, 2=2.Flanke, X=Wert nicht angeholt wegen Warteschleife, dann kann in der Hauptschleife doch folgendes passieren:

    1XX2

    Dann ist Deine Berechnung doch falsch oder ich blick absolut net as Du da tust

    Jepp. Ein nicht-blockierender I²C ist einige Arbeit und auch net so schlank.
    Disclaimer: none. Sue me.

  2. #22
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2006
    Beiträge
    22
    Wieso sollte die 2 nicht abgeholt werden? Sobald die Flanke kommt, wird die Interrupt-Routine garantiert ausgeführt. Egal, ob gerade ein wait etc. läuft. Der Interrupt hat ja Vorang! Die Zeit wird in der Interrupt-Routine in eine Variable gespeichert.

    Trotzdem arbeite ich weiter am nicht-blockieredem I2C, der leider schon am Anfang nicht läuft. Hier mal der erste Block des Zustandsautomaten:

    Funktionierende Version noch mit "while":
    Code:
    switch (I2C_Zustand)
    		   {
    		    case 0:  //TWIM_START 1
    
    		  	 TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    
    			  while (!(TWCR & (1<<TWINT)));
    
    	                  I2C_Zustand = 1;	 
    
    		    break;
    
                        case 1:
    
                              //der zweite I2C Zustand etc.
    
                        break:
    Jetzt will ich ja das while vermeiden und habe mir folgendes überlegt, dass leider nicht funktioniert:

    Code:
    switch (I2C_Zustand)
    		   {
    		    case 0:  //TWIM_START 1
    
    		  	 TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
    
    			  if (!(TWCR & (1<<TWINT)));
                                I2C_Zustand = 1;
    	     
    		    break;
    
                        case 1:
    
                             //der zweite I2C Zustand etc.
    
                        break:
    Hier habe ich schon den Fehler, dass anscheinend die Bedingung immer wahr ist. Obwohl die Bedingung erst wahr sein dürfte, wenn der Empfang abgeschlossen ist.

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Und wo wirds vom Interrupt abgeholt wenn dein Hauptprog schleift?

    TWI
    -- da isn ; zu viel nachm if
    -- START is nur ne Flanke, denkbar dass das ohne Verzögerung geht
    Disclaimer: none. Sue me.

  4. #24
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2006
    Beiträge
    22
    Und wo wirds vom Interrupt abgeholt wenn dein Hauptprog schleift?
    Wenn mein Hauptprogramm in einem wait hängt, hat der Interrupt doch Vorang? Also wird direkt in die Int0-Routine gesprungen, inder der Wert abgeholt wird und in einer Variablen gespeichert wird. Bei Ende der Int0-Routine geht es wieder zurück ins Hauptprogramm und das wait wird weiter ausgeführt.

    Ich bin jetzt schon einige Zeit am Interrupt-TWI dran. Ich kann schon Zeichen übertragen, aber irgendwie ist das mehr probieren als verstehen. Irgendwie fehlen mir einige Informationen, die im Datenblatt nicht ausführlich genug sind. Hast du vielleicht ein Beispiel oder andere Informationen?

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