Autor Thema: Probleme mit den CCP1 Timing Werten  (Gelesen 6375 mal)

Veit

  • Gast
Probleme mit den CCP1 Timing Werten
« am: Juni 09, 2004, 11:47:17 Vormittag »
Hallo Leute, ich muß euch nochmal ein wenig nerven
Ich habe doch das Problem mit dem Einlesen schneller Signale gahabt und habe es mit dem CCP Modul gelöst. Nur habe ich jetzt festgestellt, dass die Timingwerte, die das CCP Modul vom Timer1 bei jeder Flanke bekommt, nicht stimmen können.
Da mein debugger(ICD_U40) ja leider nicht richtig arbeitet und CCS auch keinen Rat weiß, woran es liegt, muß ich mich damit behelfen, dass ich an einige Ports LEDs anschließe und somit mit dem Oszi messen kann, ob der controler zu bestimmten Zeiten richtug arbeitet.

Ich habe jetzt das Problem, dass zwar jede Flanke abgearbeitet wird, nur stimmen die Timingwerte nicht, die das CCP Modul speichert. Es ist doch so, dass bei jedem Ereignis (fallende und steigende Flanke) die Werte des Timers in CCP Register geschrieben werden und danach der Timer wieder auf 0 gesetzt wird?! Das geschieht durch die Hardware.
Ich sende dem PIC nun ein Signal, das aus 18 Bits besteht und jedes kann einmal 26µs High und 182µs Low sein oder umgekehrt. Meine ISR wertet die Zeiten aus, und stellt immer fest, dass sie nicht korrekt sind und schaltet einen Port auf 0(für nicht korrektes Signal). Ich weiß aber genau, dass die Werte stimmen und messe sie und den Port - der signalisiert, ob korrektes Signal oder nicht - zeitgleich mit dem Oszi. Das heißt, die Timingwerte sind falsch und nun weiß ich nicht warum???
Vielleicht könnt ihr mir sagen, was hier falsch läuft..
#include "test_ccp_flankenerfassung.h"

/******************************************************************************
 * Initialisierung aller globalen Variablen                                   *
 ******************************************************************************/
   unsigned char Z_Bit;               // Zähler für BIT - Anzahl
   unsigned char TimerHigh, TimerLow; // Speicher für High und Low-Zeit
   unsigned int32 I_Puffer;           // Speicher für ein Kommando (18 Bits)
   
   unsigned char START;               // Merker für "läuft" bei der Signalauswertung
   unsigned int kl, gr;               // Zeit der langen und kurzen Pulse
   unsigned char bit;                 // erkanntes Signal ist 1 oder 0 -->bit

   #BYTE STATUS =0xfd8     // Adresse des STATUS Registers
   #BYTE BSR = 0xfe0       // Adresse des BSR Registers
   #BYTE W_TEMP = 0x00A     // virtueller Speicher im RAM für WREG Register
   #BYTE STATUS_TEMP = 0x00B// virtueller Speicher im RAM für STATUS Register
   #BYTE BSR_TEMP = 0x00C   // virtueller Speicher im RAM für BSR Register
   #BYTE T1CON = 0xfcd     // Adresse des T1CON Register
   #BYTE T3CON = 0xfb1     // Adresse des T3CON Register

   #bit IR = 0xf9e.2       // interrupt request bit für CCP1
   #bit CCP1CON0 = 0xfbd.0 // Bit zum Umschalten der Flanke des CCP1 Moduls
   #bit IE = 0xf9d.2       // interrupt enable bit für CCP1
   #bit C1 = 0xF94.2       // PORT C1
/******************************************************************************
 * Ende der Initialisierung aller globalen Variablen                          *
 ******************************************************************************/


/******************************************************************************
 * Funktion:         int_global                                               *
 * Beschreibung:     aktiviert bei steigender und fallender Flanke durch CCP1 *
 *                   Erkennen des Bits (1 oder 0)                             *
 *                   Speichern des Bits                                       *
 *                                                                            *
 *                                                                            *
 * Parameter:        keine                                                    *
 *                                                                            *
 * Rückgabe:         keine                                                    *
 ******************************************************************************/

#int_global
global_isr() {

#asm
   MOVWF W_TEMP               ; Sichern von WREG
   MOVFF STATUS, STATUS_TEMP  ; Sichern von STATUS
   MOVFF BSR, BSR_TEMP        ; Sichern von BSR
#endasm

IR=0;    //interrupt request flag zurücksetzen, damit neuer Interrupt gespeichert wird

   // Register des CCP1 abfragen, ob aktuell steigende oder fallende Flanke den Int ausgelöst hat
   //CCP1CON (FBD=Adresse: 0xFBD) Bit 3 bis 0 --> 0100=FE / 0101=RE

   if (CCP1CON0)                 // aktuell steigende Flanke
   {   output_high(PIN_A1);      // nur zum Testen (Begin der ISR für steigende Flanke)

       CCP1CON0=0;               // Umschalten auf fallende Flanke
       TimerLow=CCP_1;           // Timer1-Wert=Low-Dauer

       if (START == 1)           // wenn bereits an
       {
         if ( ((TimerLow+TimerHigh) > 180) && ((TimerLow+TimerHigh) < 230) )  // ein Bit = 204µs
         {
         output_high(PIN_C4);  //Timerwerte sind richtig--> Pin C4 auf high
         Z_Bit ++;             // BitZähler erhöhen (insgesamt 18 Bits pro Paket)
         // klein und gross bestimmen
            if (TimerLow < TimerHigh) { gr = TimerLow; kl= TimerHigh; bit = 0;}   //Log 0 oder 1 in bit speichern
            else { kl = TimerLow; gr= TimerHigh; bit = 1;}
            // Bit sichern
            if (bit == 1)
            {I_Puffer = I_Puffer | (0x00000001 << z_Bit);}
         
         }
         else                  // Timerwerte sind falsch oder Signal nicht gültig
         {
         output_low(PIN_C4);
         START = 0;
         Z_Bit=0;             // BitZähler löschen
         }

       }
       else                   // wenn START=0 (bei Fehler)
       {
       START = 1;
       Z_Bit=0;               // BitZähler löschen
       }
       output_low(PIN_A1);    // nur zum Testen (Ende der ISR für steigende Flanke)
   }
   else                       // aktuell fallende Flanke
   {
   output_high(PIN_A2);       // nur zum Testen (Begin der ISR für fallende Flanke)

   CCP1CON0=1;                // Umschalten auf steigende Flanke
   TimerHigh=CCP_1;           // Timer1-Wert=High-Dauer

      if (z_Bit==17)          // letztes Bit
      {
         if (TimerHigh > 40)  // letztes Bit=1
         {
         I_Puffer = I_Puffer | (0x00000001 << (z_Bit+1));   //Bit 18 =1
         }
      }

   output_low(PIN_A2);
   }
if (START ==1) {output_high(PIN_C6);} else {output_low(PIN_C6);} //zum Testen
#asm
   MOVFF BSR_TEMP, BSR         ; Zurückschreiben von BSR
   MOVF W_TEMP, W              ; Zurückschreiben von WREG
   MOVFF STATUS_TEMP, STATUS   ; Zurückschreiben von STATUS
#endasm
}
void main() {

   setup_oscillator(OSC_8MHZ);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_ccp1(CCP_CAPTURE_RE);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   enable_interrupts(INT_CCP1);
   enable_interrupts(GLOBAL);
}


    CCS PCH C Compiler, Version 3.187, 23043

                   Filename: test_ccp_flankenerfassung.LST

                   ROM used: 376 (5%)
                             Largest free fragment is 6980
                   RAM used: 16 (3%) at main() level
                             18 (4%) worst case
                   Stack:    1 worst case (0 in main + 1 for interrupts)

    *
    0000:  GOTO   010C
    ....................  #include "test_ccp_flankenerfassung.h"
    ....................  #include <18F2320.h>
    ....................  //////// Standard Header file for the PIC18F2320 device ////////////////
    .................... #device PIC18F2320
    .................... #list
    ....................
    .................... #device ICD=TRUE
    .................... #device adc=8
    .................... #use delay(clock=8000000)
    .................... #fuses NOWDT,WDT128,INTRC, NOFCMEN, NOBROWNOUT, BORV20, NOPUT, NOCPD, NOSTVREN, DEBUG, NOLVP, NOWRT, NOWRTD, NOIESO, NOEBTR, NOEBTRB, NOMCLR, NOPROTECT, NOCPB, NOWRTB, NOWRTC, NOPBADEN
    ....................
    ....................
    ....................
    .................... /******************************************************************************
    ....................  * Initialisierung aller globalen Variablen                                   *
    ....................  ******************************************************************************/
    ....................    unsigned char Z_Bit;               // Zähler für BIT - Anzahl
    ....................    unsigned char TimerHigh, TimerLow; // Speicher für High und Low-Zeit
    ....................    unsigned int32 I_Puffer;           // Speicher für ein Kommando (18 Bits)
    ....................
    ....................    unsigned char START;               // Merker für "läuft" bei der Signalauswertung
    ....................    unsigned int kl, gr;               // Zeit der langen und kurzen Pulse
    ....................    unsigned char bit;                 // erkanntes Signal ist 1 oder 0 -->bit
    ....................
    ....................    #BYTE STATUS =0xfd8     // Adresse des STATUS Registers
    ....................    #BYTE BSR = 0xfe0       // Adresse des BSR Registers
    ....................    #BYTE W_TEMP = 0x00A     // virtueller Speicher im RAM für WREG Register
    ....................    #BYTE STATUS_TEMP = 0x00B// virtueller Speicher im RAM für STATUS Register
    ....................    #BYTE BSR_TEMP = 0x00C   // virtueller Speicher im RAM für BSR Register
    ....................    #BYTE T1CON = 0xfcd     // Adresse des T1CON Register
    ....................    #BYTE T3CON = 0xfb1     // Adresse des T3CON Register
    ....................
    ....................    #bit IR = 0xf9e.2       // interrupt request bit für CCP1
    ....................    #bit CCP1CON0 = 0xfbd.0 // Bit zum Umschalten der Flanke des CCP1 Moduls
    ....................    #bit IE = 0xf9d.2       // interrupt enable bit für CCP1
    ....................    #bit C1 = 0xF94.2       // PORT C1
    .................... /******************************************************************************
    ....................  * Ende der Initialisierung aller globalen Variablen                          *
    ....................  ******************************************************************************/
    ....................
    ....................
    .................... /******************************************************************************
    ....................  * Funktion:         int_global                                               *
    ....................  * Beschreibung:     aktiviert bei steigender und fallender Flanke durch CCP1 *
    ....................  *                   Erkennen des Bits (1 oder 0)                             *
    ....................  *                   Speichern des Bits                                       *
    ....................  *                                                                            *
    ....................  *                                                                            *
    ....................  * Parameter:        keine                                                    *
    ....................  *                                                                            *
    ....................  * Rückgabe:         keine                                                    *
    ....................  ******************************************************************************/
    ....................
    .................... #int_global
    .................... global_isr() {
    ....................
    .................... #asm
    ....................    MOVWF W_TEMP               ; Sichern von WREG
    *
    0008:  MOVWF  0A
    ....................    MOVFF STATUS, STATUS_TEMP  ; Sichern von STATUS
    000A:  MOVFF  FD8,0B
    ....................    MOVFF BSR, BSR_TEMP        ; Sichern von BSR
    000E:  MOVFF  FE0,0C
    .................... #endasm
    ....................
    .................... IR=0;    //interrupt request flag zurücksetzen, damit neuer Interrupt gespeichert wird
    0012:  BCF    F9E.2
    ....................
    ....................    // Register des CCP1 abfragen, ob aktuell steigende oder fallende Flanke den Int ausgelöst hat
    ....................    //CCP1CON (FBD=Adresse: 0xFBD) Bit 3 bis 0 --> 0100=FE / 0101=RE
    ....................
    ....................    if (CCP1CON0)                 // aktuell steigende Flanke
    ....................    {   output_high(PIN_A1);      // nur zum Testen (Begin der ISR für steigende Flanke)
    0014:  BTFSS  FBD.0
    0016:  GOTO   00AC
    001A:  BCF    F92.1
    001C:  BSF    F89.1
    ....................
    ....................        CCP1CON0=0;               // Umschalten auf fallende Flanke
    001E:  BCF    FBD.0
    ....................        TimerLow=CCP_1;           // Timer1-Wert=Low-Dauer
    0020:  MOVFF  FBE,07
    ....................
    ....................        if (START == 1)           // wenn bereits an
    ....................        {
    0024:  DECFSZ 0C,W
    0026:  GOTO   009E
    ....................          if ( ((TimerLow+TimerHigh) > 180) && ((TimerLow+TimerHigh) < 230) )  // ein Bit = 204µs
    ....................          {
    002A:  MOVF   06,W
    002C:  ADDWF  07,W
    002E:  SUBLW  B4
    0030:  BTFSC  FD8.0
    0032:  GOTO   0092
    0036:  MOVF   06,W
    0038:  ADDWF  07,W
    003A:  SUBLW  E5
    003C:  BTFSS  FD8.0
    003E:  GOTO   0092
    ....................          output_high(PIN_C4);  //Timerwerte sind richtig--> Pin C4 auf high
    0042:  BCF    F94.4
    0044:  BSF    F8B.4
    ....................          Z_Bit ++;             // BitZähler erhöhen (insgesamt 18 Bits pro Paket)
    0046:  INCF   05,F
    ....................          // klein und gross bestimmen
    ....................             if (TimerLow < TimerHigh) { gr = TimerLow; kl= TimerHigh; bit = 0;}   //Log 0 oder 1 in bit speichern
    0048:  MOVF   06,W
    004A:  SUBWF  07,W
    004C:  BTFSC  FD8.0
    004E:  GOTO   0060
    0052:  MOVFF  07,0E
    0056:  MOVFF  06,0D
    005A:  CLRF   0F
    ....................             else { kl = TimerLow; gr= TimerHigh; bit = 1;}
    005C:  GOTO   006C
    0060:  MOVFF  07,0D
    0064:  MOVFF  06,0E
    0068:  MOVLW  01
    006A:  MOVWF  0F
    ....................             // Bit sichern
    ....................             if (bit == 1)
    ....................             {I_Puffer = I_Puffer | (0x00000001 << z_Bit);}
    006C:  DECFSZ 0F,W
    006E:  GOTO   008E
    0072:  MOVLW  01
    0074:  MOVWF  00
    0076:  MOVF   05,W
    0078:  MOVWF  01
    007A:  BTFSC  FD8.2
    007C:  GOTO   008A
    0080:  BCF    FD8.0
    0082:  RLCF   00,F
    0084:  DECFSZ 01,F
    0086:  GOTO   0080
    008A:  MOVF   00,W
    008C:  IORWF  08,F
    ....................
    ....................          }
    ....................          else                  // Timerwerte sind falsch oder Signal nicht gültig
    ....................          {
    008E:  GOTO   009A
    ....................          output_low(PIN_C4);
    0092:  BCF    F94.4
    0094:  BCF    F8B.4
    ....................          START = 0;
    0096:  CLRF   0C
    ....................          Z_Bit=0;             // BitZähler löschen
    0098:  CLRF   05
    ....................          }
    ....................
    ....................        }
    ....................        else                   // wenn START=0 (bei Fehler)
    ....................        {
    009A:  GOTO   00A4
    ....................        START = 1;
    009E:  MOVLW  01
    00A0:  MOVWF  0C
    ....................        Z_Bit=0;               // BitZähler löschen
    00A2:  CLRF   05
    ....................        }
    ....................        output_low(PIN_A1);    // nur zum Testen (Ende der ISR für steigende Flanke)
    00A4:  BCF    F92.1
    00A6:  BCF    F89.1
    ....................    }
    ....................    else                       // aktuell fallende Flanke
    ....................    {
    00A8:  GOTO   00EE
    ....................    output_high(PIN_A2);       // nur zum Testen (Begin der ISR für fallende Flanke)
    00AC:  BCF    F92.2
    00AE:  BSF    F89.2
    ....................
    ....................    CCP1CON0=1;                // Umschalten auf steigende Flanke
    00B0:  BSF    FBD.0
    ....................    TimerHigh=CCP_1;           // Timer1-Wert=High-Dauer
    00B2:  MOVFF  FBE,06
    ....................
    ....................       if (z_Bit==17)          // letztes Bit
    ....................       {
    00B6:  MOVF   05,W
    00B8:  SUBLW  11
    00BA:  BTFSS  FD8.2
    00BC:  GOTO   00EA
    ....................          if (TimerHigh > 40)  // letztes Bit=1
    ....................          {
    00C0:  MOVF   06,W
    00C2:  SUBLW  28
    00C4:  BTFSC  FD8.0
    00C6:  GOTO   00EA
    ....................          I_Puffer = I_Puffer | (0x00000001 << (z_Bit+1));   //Bit 18 =1
    00CA:  MOVLW  01
    00CC:  ADDWF  05,W
    00CE:  MOVWF  01
    00D0:  MOVLW  01
    00D2:  MOVWF  00
    00D4:  MOVF   01,F
    00D6:  BTFSC  FD8.2
    00D8:  GOTO   00E6
    00DC:  BCF    FD8.0
    00DE:  RLCF   00,F
    00E0:  DECFSZ 01,F
    00E2:  GOTO   00DC
    00E6:  MOVF   00,W
    00E8:  IORWF  08,F
    ....................          }
    ....................       }
    ....................
    ....................    output_low(PIN_A2);
    00EA:  BCF    F92.2
    00EC:  BCF    F89.2
    ....................    }
    .................... if (START ==1) {output_high(PIN_C6);} else {output_low(PIN_C6);} //zum Testen
    00EE:  DECFSZ 0C,W
    00F0:  GOTO   00FC
    00F4:  BCF    F94.6
    00F6:  BSF    F8B.6
    00F8:  GOTO   0100
    00FC:  BCF    F94.6
    00FE:  BCF    F8B.6
    ....................
    .................... #asm
    ....................
    ....................    MOVFF BSR_TEMP, BSR         ; Zurückschreiben von BSR
    0100:  MOVFF  0C,FE0
    ....................    MOVF W_TEMP, W              ; Zurückschreiben von WREG
    0104:  MOVF   0A,W
    ....................    MOVFF STATUS_TEMP, STATUS   ; Zurückschreiben von STATUS
    0106:  MOVFF  0B,FD8
    ....................
    .................... #endasm
    ....................
    .................... }
    ....................
    ....................
    ....................
    010A:  RETFIE 0
    .................... void main() {
    ....................
    010C:  CLRF   FF8
    010E:  BCF    FD0.7
    0110:  CLRF   FEA
    0112:  CLRF   FE9
    0114:  MOVLW  0F
    0116:  MOVWF  FC1
    0118:  MOVLW  07
    011A:  MOVWF  FB4
    ....................    setup_oscillator(OSC_8MHZ);
    011C:  MOVLW  70
    011E:  MOVWF  FD3
    ....................    setup_adc_ports(NO_ANALOGS);
    0120:  MOVLW  0F
    0122:  MOVWF  FC1
    ....................    setup_adc(ADC_OFF);
    0124:  CLRF   FC2
    0126:  CLRF   FC0
    ....................    setup_spi(FALSE);
    0128:  BCF    FC6.5
    012A:  BCF    F94.5
    012C:  BSF    F94.4
    012E:  BCF    F94.3
    0130:  MOVLW  00
    0132:  MOVWF  FC6
    0134:  MOVWF  FC7
    ....................    setup_wdt(WDT_OFF);
    0136:  BCF    FD1.0
    ....................    setup_timer_0(RTCC_INTERNAL);
    0138:  MOVLW  80
    013A:  MOVWF  FD5
    ....................    setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
    013C:  MOVLW  95
    013E:  MOVWF  FCD
    ....................    setup_timer_2(T2_DISABLED,0,1);
    0140:  MOVLW  00
    0142:  MOVWF  01
    0144:  MOVWF  FCA
    0146:  MOVLW  00
    0148:  MOVWF  FCB
    ....................    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
    014A:  MOVF   FB1,W
    014C:  ANDLW  48
    014E:  MOVWF  FB1
    ....................    setup_ccp1(CCP_CAPTURE_RE);
    0150:  MOVLW  B7
    0152:  ANDWF  FB1,F
    0154:  BSF    F94.2
    0156:  CLRF   FBD
    0158:  MOVLW  05
    015A:  MOVWF  FBD
    ....................    setup_comparator(NC_NC_NC_NC);
    015C:  MOVLW  07
    015E:  MOVWF  FB4
    0160:  MOVF   F96,W
    0162:  MOVLW  06
    0164:  MOVWF  00
    0166:  DECFSZ 00,F
    0168:  BRA    0166
    016A:  NOP
    016C:  MOVF   FB4,W
    016E:  BCF    FA1.6
    ....................    setup_vref(FALSE);
    0170:  CLRF   FB5
    ....................
    ....................    enable_interrupts(INT_CCP1);
    0172:  BSF    F9D.2
    ....................    enable_interrupts(GLOBAL);
    0174:  MOVLW  C0
    0176:  IORWF  FF2,F
    ....................
    ....................
    ....................
    .................... }
    ....................
    0178:  GOTO   0178

    Configuration Fuses:
       Word  1: 0900   INTRC NOFCMEN NOIESO
       Word  2: 0E0C   NOBROWNOUT WDT128 NOWDT BORV20 PUT
       Word  3: 0100   CCP2C1 NOMCLR NOPBADEN
       Word  4: 0001   STVREN DEBUG NOLVP
       Word  5: C00F   NOCPD NOPROTECT NOCPB
       Word  6: E00F   NOWRT NOWRTD NOWRTB NOWRTC
       Word  7: 400F   NOEBTR NOEBTRB
    [/list:u]

    Die LED an PIN C4 bleibt ständig auf Low, d.h. die Werte stimmen nicht. Sie sollten aber stimmen, da der Timer jede µs erhöht wird, und er maximal bis 182 zählen kann bis er wieder gelöscht wird...
    Ich habe auch schon den PIC gewechselt, aber daran liegt's nicht.

    Gruß Veit

Offline Sandynister

  • Hero Member
  • *****
  • Beiträge: 557
    • Profil anzeigen
Probleme mit den CCP1 Timing Werten
« Antwort #1 am: Juni 09, 2004, 12:17:24 Nachmittag »
kannst du so lange Sachen nicht als File anhängen, bitte....
das ist ja kaum mehr zu lesen....

Offline Steffen

  • Hero Member
  • *****
  • Beiträge: 1235
    • Profil anzeigen
Probleme mit den CCP1 Timing Werten
« Antwort #2 am: Juni 09, 2004, 12:37:46 Nachmittag »
Der Timer wird nicht auf Null gesetzt, sondern läuft weiter.
Du musst also immer den letzten Wert abspeichern und die Differenz bilden.
!!! Überlauf beachten. !!!

Steffen

Veit

  • Gast
Probleme mit den CCP1 Timing Werten
« Antwort #3 am: Juni 09, 2004, 12:55:37 Nachmittag »
Hab ich mir schon fast gedacht...
Danke und ich werde auch nicht mehr so lange Sachen als File ranhängen, dachte nur, bevor ihr wieder meckert, dass kein Code und Listing da ist, häng ich's einfach mit ran... :yawinkle:

Offline Steffen

  • Hero Member
  • *****
  • Beiträge: 1235
    • Profil anzeigen
Probleme mit den CCP1 Timing Werten
« Antwort #4 am: Juni 09, 2004, 12:59:28 Nachmittag »
Doch, anhängen natürlich aber ALS File.

Steffen

Veit

  • Gast
Probleme mit den CCP1 Timing Werten
« Antwort #5 am: Juni 09, 2004, 13:41:40 Nachmittag »
da muß ich gleich nochmal nachfragen, was ist ein ALS File und wie hänge ich die Dateien dort an? und muß ich mich dazu registrieren??

Und in welchem Register wird das Überlauf Bit beim 18Fxxxx für den Timer1 und für wie lange gepeichert?

Gruß Veit

Offline Sandynister

  • Hero Member
  • *****
  • Beiträge: 557
    • Profil anzeigen
Probleme mit den CCP1 Timing Werten
« Antwort #6 am: Juni 09, 2004, 13:58:17 Nachmittag »
1. File ist das englische Wort für Datei.
2. ALS ist ein deutsches Wort. Es wird z.B. in diesem Zusammenhang benutzt : "Ich stehe heute mehr auf der Leitung als gestern noch".

3. PIR , wie lange: Tja so lange bis man Strom abschaltet oder es löscht

Ließ dir mal das Datenblatt durch....

Ob man als Unregistrierter Dateien anhängen kann weiß ich nicht....

In diesem Sinne

Ausgelogter Steffen

  • Gast
Probleme mit den CCP1 Timing Werten
« Antwort #7 am: Juni 09, 2004, 14:38:39 Nachmittag »
Nee, wie ich sehe kann man ohne Registrierung keine Dateien anhängen.

Steffen

PS: Ich glaube das hat Bernd schonmal festgestellt.

Veit

  • Gast
Probleme mit den CCP1 Timing Werten
« Antwort #8 am: Juni 09, 2004, 15:16:11 Nachmittag »
dann werde ich mich mal registrieren...

dabei fällt mir gleich meine nächste Frage ein:
nerve ich schon ???  :yawinkle:

wie schreibe ich eigentlich in c, dass ich die beiden CCP1High und CCP1Low Werte in einer 2Byte Variable speicher?
hab's mit
timer_neu=0;
timer_neu=CCP_1_HIGH;
timer_neu=Timer_neu << 8;
timer_neu=CCP_1_LOW;

probiert, aber das geht nicht...

[list=].................... timer_neu=0;
0014:  CLRF   2A
0016:  CLRF   29
.................... timer_neu=CCP_1_HIGH;
0018:  CLRF   2A
001A:  MOVFF  FBF,29
.................... timer_neu=Timer_neu << 8;
001E:  MOVFF  29,2A
0022:  CLRF   29
.................... timer_neu=CCP_1_LOW;
0024:  CLRF   2A
0026:  MOVFF  FBE,29[/list]

nochmals Danke und Lieben Gruß

Offline Steffen

  • Hero Member
  • *****
  • Beiträge: 1235
    • Profil anzeigen
Probleme mit den CCP1 Timing Werten
« Antwort #9 am: Juni 09, 2004, 15:42:05 Nachmittag »
Wenn, dann müsstest Du folgendes machen:

timer_neu=0;
timer_neu=CCP_1_HIGH;
timer_neu=Timer_neu << 8;
timer_neu+=CCP_1_LOW;


funktionieren tut aber auch folgendes:


int16 CCPR1;
#locate CCPR1=0x15  // legt fest, das CCPR1 auf Adresse 0x15 !!! gilt nur für PIC16F876 !!! liegt
 timer_neu=CCPR1;


Steffen

 


* Recent Topics