- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: Kleine Uhr

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    22.11.2004
    Beiträge
    43
    Anzeige

    Powerstation Test
    Allgemein auch: preValue = 65536 - f / pre

    PreValue: Zahl mit der der Zähler vorgeladen wird
    f: Frequenz die Oszis
    pre: Prescaler

    Da preValue eine natürliche Zahl sein soll, muss pre entsprechend angepasst werden.

  2. #12

    Bei mir gehts das Programm nicht!

    Hallo


    also hab das Programm an meine LCD-Steuerung angepasst bei mir geht es aber nicht! Auf dem Display steht nur " \L L " Also nichts sinnvolles.

    Code:
    #include <stdio.h>
    
    #include "LCD/lcd-routines.h"
    #include "LCD/lcd.c"
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    
    
    #define preValue 57724
    
    int volatile gSeconds = 0;
    
    SIGNAL (SIG_OVERFLOW1)
    {
      gSeconds++;
      TCNT1 = preValue;
    }
     
     
    int main (void)
    {
      int seconds = 0;
      int minutes = 0;
      int hours   = 0;
      char mytime[] = "00:00:00";
    
    
      lcd_init ();
    
      
    
      TCCR1B = (1<<CS00) | (1<<CS01);
      TIMSK |= (1<<TOIE1);
      TCNT1 = preValue;
      sei ();
       
      lcd_data ("Time: ");
      lcd_data (mytime);
       
      while (1)
      {
        if (seconds != gSeconds)
        {
          seconds = gSeconds;
             
          if (seconds == 60)
          {
            seconds = 0;
            gSeconds = 0;
            minutes++;
          }
          if (minutes == 60)
          {
            minutes = 0;
            hours++;
          }
          if (hours == 24)
            hours = 0;
    
          /* Uhrzeit formatieren */
          sprintf (mytime, "%02d:%02d:%02d", hours, minutes, seconds);         
    
          /* und auf dem Display ausgeben */
          set_cursor (6,1);
          lcd_data (mytime);
        }
      }
    }
    Hier meine LDC.c
    Code:
    // Pinbelegung über defines einstellbar
     
    #include <avr/io.h>
    #include <util/delay.h>
    #include "lcd-routines.h" 
     
    // LCD Befehle
     
    #define CLEAR_DISPLAY 0x01
    #define CURSOR_HOME   0x02
     
    // Pinbelegung für das LCD
     
    #define LCD_PORT      PORTA
    #define LCD_DDR       DDRA
    #define LCD_RS        4
    #define LCD_EN        5
    
     
    // sendet ein Datenbyte an das LCD
     
    void lcd_data(unsigned char temp1)
    {
       unsigned char temp2 = temp1;
     
       LCD_PORT |= (1<<LCD_RS);        // RS auf 1 setzen
     
       temp1 = temp1 >> 4;
       temp1 = temp1 & 0x0F;
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp1;               // setzen
       lcd_enable();
     
       temp2 = temp2 & 0x0F;
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp2;               // setzen
       lcd_enable();
       
       _delay_us(200);
    }
     
    // sendet einen Befehl an das LCD
     
    void lcd_command(unsigned char temp1)
    {
       unsigned char temp2 = temp1;
     
        LCD_PORT &= ~(1<<LCD_RS);       // RS auf 0 setzen
     
       temp1 = temp1 >> 4;              // oberes Nibble holen
       temp1 = temp1 & 0x0F;            // maskieren
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp1;               // setzen
       lcd_enable();
     
       temp2 = temp2 & 0x0F;            // unteres Nibble holen und maskieren
       LCD_PORT &= 0xF0;
       LCD_PORT |= temp2;               // setzen
       lcd_enable();
       
       _delay_us(200);
    }
     
    // erzeugt den Enable-Puls
    void lcd_enable(void)
    {
       LCD_PORT |= (1<<LCD_EN);
        _delay_us(1);
       LCD_PORT &= ~(1<<LCD_EN);
    }
     
    // Initialisierung: 
    // Muss ganz am Anfang des Programms aufgerufen werden.
     
    void lcd_init(void)
    {
       LCD_DDR = LCD_DDR | 0xF | (1<<LCD_RS) | (1<<LCD_EN);   // Port auf Ausgang schalten
     
       // muss 3mal hintereinander gesendet werden zur Initialisierung
     
        _delay_ms(200);
       LCD_PORT &= 0xF0;
       LCD_PORT |= 0x03;            
       LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
       lcd_enable();
     
        _delay_ms(200);
       lcd_enable();
     
        _delay_ms(200);
       lcd_enable();
     
       // 4 Bit Modus aktivieren 
       LCD_PORT &= 0xF0;
       LCD_PORT |= 0x02;
       lcd_enable();
     
       // 4Bit / 2 Zeilen / 5x7
        lcd_command(0x28);
        
       // Display ein / Cursor aus / kein Blinken
       lcd_command(0x0C); 
     
       // inkrement / kein Scrollen
       lcd_command(0x06);
     
        lcd_clear();
    }
     
    // Sendet den Befehl zur Löschung des Displays
     
    void lcd_clear(void)
    {
       lcd_command(CLEAR_DISPLAY);
       _delay_ms(200);
    }
     
    // Sendet den Befehl: Cursor Home
     
    void lcd_home(void)
    {
       lcd_command(CURSOR_HOME);
       _delay_ms(200);
    }
     
    // setzt den Cursor in Zeile y (1..4) Spalte x (0..15)
     
    void set_cursor(uint8_t x, uint8_t y)
    {
      switch (y) {
        case 1: lcd_command(0x80+0x00+x); break;    // 1. Zeile
        case 2: lcd_command(0x80+0x40+x); break;    // 2. Zeile
        //case 3: lcd_command(0x80+0x10+x); break;    // 3. Zeile
        //case 4: lcd_command(0x80+0x50+x); break;    // 4. Zeile
      }
    }
    Hier meine lcd-routines.h
    Code:
    void lcd_data(unsigned char temp1);
    void lcd_command(unsigned char temp1);
    void lcd_enable(void);
    void lcd_init(void);
    void lcd_home(void);
    void lcd_clear(void);
    void set_cursor(uint8_t x, uint8_t y);
    Vielleicht kann jemand von euch seine Display Ansteuerungsdatein Posten?

    Grüße Johannes[/quote]

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress