-         

Ergebnis 1 bis 3 von 3

Thema: CCS C Compiler und PIC12F675 und Quartz und Timer

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Beiträge
    89

    CCS C Compiler und PIC12F675 und Quartz und Timer

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    hallo zusammen,

    ich habe hier einen PIC12F675 mit einem 4MHz Quartz, diesen programmiere ich mit dem ccs c compiler und anschließend wird der pic mit dem mplab 7.5 + icd2 gebrannt. allerdings macht mir gerade der timer0 ein wenig kopfschmerzen, mein hardware/software timer kann ich nur auf ganze sekunden werte einstellen, also: 1, 2, 3, 4, 5, 6, ...


    Code:
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
    enable_interrupts(INT_TIMER0);
    enable_interrupts(GLOBAL);
    
    
    unsigned int8 TM_VALUE_1SEC = 250;
    unsigned int8 TM_VALUE_XSEC = 0;
    
    unsigned int8 TM_COUNT_1SEC = 0;
    unsigned int8 TM_COUNT_XSEC = 0;
    
    unsigned int1 TM_FLAG_1SEC = FALSE;
    unsigned int1 TM_FLAG_XSEC = FALSE;
    unsigned int1 TM_FLAG_MAIN = FALSE;
    
    
    #int_TIMER0
    TIMER0_isr( /* 4ms */ )
    {
    	TM_FLAG_1SEC = FALSE;
    	TM_FLAG_XSEC = FALSE;
    
    	if( ++TM_COUNT_1SEC >= TM_VALUE_1SEC)
    	{
    		TM_COUNT_1SEC = 0;
    		TM_FLAG_1SEC = TRUE;
    	}
    
    	if( TM_FLAG_1SEC == TRUE)
    	{
    		if( ++TM_COUNT_XSEC >= TM_VALUE_XSEC)
    		{
    			TM_COUNT_XSEC = 0;
    			TM_FLAG_XSEC = TRUE;
    		}
    	}
    
    	if( TM_FLAG_XSEC == TRUE)
    	{
    		TM_FLAG_MAIN = TRUE;
    	}
    }
    
    
    void main()
    {
    	if( TM_FLAG_MAIN == TRUE)
    	{
    		TM_FLAG_MAIN = FALSE;
    		toggle_einen_ausgang();
    	}
    	else
    	{
    		toggle_einen_anderen_ausganag();
    	}
    }

    aber der timer läuft "falsch", wenn ich die zeit messe, bekomme ich immer werte hinter einem komma heraus ?!?!

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Beiträge
    89
    ups, das wichtigste habe ich natürlich vergessen:

    Code:
    setup_adc_ports(sAN2|VSS_VDD);
    setup_adc(ADC_CLOCK_DIV_64);
    set_adc_channel( AN2);
    setup_vref(FALSE);
    
    const unsigned int16 ADCRESOLUTION = 255;
    const unsigned int16 TIMER_MAX = 60;
    
    TM_VALUE_XSEC = (ADCRESOLUTION - (unsigned int16)read_adc()) * TIMER_MAX / ADCRESOLUTION;
    der poti welchen ich ablese ist anders_herum_eingebaut, daher ADCRESOLUTION - read_adc(), der wert geht also von 255 bis 0 wobei 255 einer null entspricht und die null einer 255. die VREF spannung sind die 5V Versorgungsspannung.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    03.12.2004
    Beiträge
    89
    hallo zusammen,

    ich habe das ganze jetzt mal mit dem delay_ms( 1000) in eine for schleife gepackt, die zeit ist jetzt zu 100% genau... ich weiß aber nicht woran das liegt.

Berechtigungen

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