- LiFePO4 Speicher Test         
Ergebnis 11 bis 20 von 23

Thema: sehr Kurze Warteschleifen für das korrekte Timing

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    Erfahrener Benutzer Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    54
    Beiträge
    553
    Blog-Einträge
    17
    Zitat Zitat von Klebwax Beitrag anzeigen
    Was soll in 500ns (in Worten Nanosekunden) wohl sinnvolles passieren?
    Dafür natürlich nicht. Ein Zeichen ausgeben mit einem (oder zwei bei 4bit Anschluss) Strobe auf Enable des LCD kann natürlich in einem Schritt untergebracht werden.
    Zwei Postings weiter hat Siro ein __delay_ms(2) - Wartezeit für die Ausführung des LCD Kommandos. Auch wenn hier 100µs ausgereicht hätten - dafür lohnt sich das Multitasking schon mal - wenn der µC parallel noch andere Aufgaben rechnet.

    - - - Aktualisiert - - -

    meine Schrittkette sieht z.B. so aus:
    Code:
        if(Tmr8bit250usLcd == 0){
            Tmr8bit250usLcd = 4; // Standardtaktung 1ms, kann in der Statemachine überschrieben werden
            static int8_t step = 0; 
    
            switch(step){ 
            case 0: // Set DDRAM Adresse = 0x00
                LCD_TRIS_DATA = 0; // Data Pins to Outputs
                LCD_RS = 0; // command
                LCD_DATA = 0b10000000;
                strobeE();
                Tmr8bit250usLcd = 20; // next call 5ms
                Idx = 0; // Initilaisiere Zeichenausgabe
                step++; 
                break;
    
            case 1: // 16 Zeichen der Line 1 ausgeben
                LCD_RS = 1; // data
                LCD_DATA = LCD_line1[Idx];
                if (LCD_DATA == 0)
                    LCD_DATA = ' ';
                strobeE();
                Idx++;  // Nächstes Zeichen der Zeile
                if (Idx >= 16) {
                    Idx = 0;
                    step++;
                }
                break;
    //usw
    mit
    Code:
     void strobeE(){
        LCD_E = 1;
        __delay_us(1);               // delay 1us
        LCD_E = 0;
    }
    Die Timervariable Tmr8bit250usLcd wird in einem 250µs Timerinterrupt dekrementiert.
    Code:
        if (Tmr8bit250usLcd != 0)
            Tmr8bit250usLcd--;
    Ist natürlich nur ein Vorschlag, vielleicht habe ich Siro's Frage auch nur falsch verstanden ...
    Geändert von witkatz (23.06.2016 um 20:15 Uhr)

Ähnliche Themen

  1. Lipo-Ladegerät auf korrekte Funktion prüfen
    Von Che Guevara im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 17.03.2013, 10:51
  2. Korrekte Beschaltung eines Relais an einem AVR
    Von Björn im Forum AVR Hardwarethemen
    Antworten: 51
    Letzter Beitrag: 10.08.2009, 17:20
  3. Korrekte Schallmessung
    Von Dolfo im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 15.09.2008, 22:54
  4. Antworten: 3
    Letzter Beitrag: 18.01.2007, 21:10
  5. Warteschleifen bei ATMEL
    Von monoton im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 08.09.2004, 00:15

Berechtigungen

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

Solar Speicher und Akkus Tests