Timer 1 kann auf externer T1OSI-Quelle für PIC16f627A nicht erhöht werden

Neu in der PIC-Programmierung

Versuchen, einen PIC16F627A TIMER 1 mit MPLAB X IDE zu simulieren , wobei RB7/T1OSI inkrementiert und RB4 durch TMR1 ISR umschaltet.

#include <stdio.h>


#include <xc.h



#pragma config WDTE = 0;

//timer1
//period 1 ms or every 100 T1CKI
//external from T1CKI rising edge (1 sec Period) T1OSCEN = 0; //
//PIN RB4

void interrupt Pulse_ISR (void)
{
    PORTBbits.RB4 = !PORTBbits.RB4;
    PIR1bits.TMR1IF = 0;
    TMR1L = 0x96;
    TMR1H = 0xFF;    
}


void Init (void)
{
    //Global Interrupt
    //Peripheral Interrupt
   //TMR1IE
   //1:8 prescalar
   //t = 1us*8*N    N = 100 
   //TMR1 = (2^16+1) - 100 = 65436 FF96

   TRISB4 = 0;//RB4 is output
   TRISB6 = 1;//RB6 and RB7 are input
   TRISB7 = 1;

  INTCONbits.GIE = 1;
  INTCONbits.PEIE = 1;
  PIE1bits.TMR1IE = 1;

  T1CONbits.T1CKPS = 0b11;//1:8
  T1CONbits.T1OSCEN = 1;//TMR1 increments on T1OSI RB7
  T1CONbits.TMR1CS = 1;




  TMR1L = 0x96;
  TMR1H = 0xFF;


  PORTBbits.RB4 = 1;

  T1CONbits.TMR1ON = 1;    
}

void main (void)
{
    Init ();

    //I will simulate a 1 ms pulse 50% Duty Cycle at T1CKI/RB6



    while(1);
}

Ich habe einen Stimulus erstellt, bei dem ich einen Impuls an Pin RB7 mit einer Periode von 500 us erzeugt habe

Geben Sie hier die Bildbeschreibung ein

und ich beobachte das Ergebnis durch IO-Pins

Geben Sie hier die Bildbeschreibung ein

Ich baue das Projekt und debugge es, beobachte RB4 IO Pins und es schaltet nie um.

Kann mir jemand sagen warum? Danke schön.

MPLAB X IDE v3.55 PIC16F627A Debugging-Tool: Simulator

Wenn Sie einen Debug-Haltepunkt in der ISR hinzufügen, wird dieser Code jemals ausgeführt?
Möglicherweise müssen Sie auch LVP ausschalten, da sonst RB4 als PGM verwendet wird und nicht als digitaler Ausgang funktioniert.
@RogerRowland Nein, tut es nicht
@RogerRowland, ich glaube nicht, dass das der Fall ist, denn bevor ich dieses Problem bekam, habe ich dasselbe mit RB6/T1CKI gemacht ... (gleicher Code mit dem einzigen Unterschied T1OSCEN = 1; // um T1OSO zu aktivieren) und es funktionierte.
@RogerRowland, ich habe etwas im PIC16F627A-Handbuch gelesen, von dem ich denke, dass es verwandt sein könnte. Seite 53 des Handbuchs „Zwischen den Pins T1OSI (Eingang) und T1OSO (Verstärkerausgang) ist eine Quarzoszillatorschaltung eingebaut. Sie wird durch Setzen des Steuerbits T1OSCEN (T1CON<3>) aktiviert. Sie läuft während des Ruhezustands weiter ist in erster Linie für einen 32,768-kHz-Uhrquarz vorgesehen. Tabelle 7-1 zeigt die Kondensatorauswahl für den Timer1-Oszillator. Der Benutzer muss eine Software-Zeitverzögerung bereitstellen, um einen ordnungsgemäßen Oszillatorstart sicherzustellen. Das verstehe ich nicht, was es bedeutet?
Führt es irgendeinen Code aus oder hängt es da drin? Ich denke auch, dass Sie den "Uhrenstimulus" verwenden sollten ... aber nicht sicher.
@zakkos Nun, wenn ich hineingehe, bleibt es beim while(1);, wenn ich am Anfang einen Haltepunkt setze Pulse_ISR (void)und die Debugging-Simulation ausführe, erreicht der Code den Haltepunkt nicht.
@zakkos es hat mit RB6/T1CKI funktioniert, denke nicht das Problem mit dem Stimulus, den ich verwendet habe.
Sie haben einen Tippfehler in Ihrem Code, eine fehlende Klammer in #include <xc.h>Das hat nichts mit Ihrem Problem zu tun, könnte aber ein kleiner Ärger sein, wenn Sie dieses Snippet dann kopieren/einfügen möchten.

Antworten (1)

Ab Seite 170 des MPLAB® IDE User's Guide über die Simulationsmöglichkeiten auf 14-Bit-Core-PICs:

Timer1 wird in seinen verschiedenen Modi unterstützt, außer wenn er im Zählermodus durch einen externen Quarz läuft.

Ich habe versucht, es in MPLAB X IDE zu suchen, konnte es nicht finden, aber vielleicht macht das Sinn, warum es bei der Simulation nicht funktioniert hat.
Ich habe Ihren Code ausprobiert und er hat bei mir auch nicht funktioniert, aber es hat irgendwie funktioniert, wenn ich die Uhr auf den T1OSOPin injiziert habe. Da Sie bei Verwendung eines Kristalls beide Pins damit verbunden haben, können Sie versuchen, Ihr Programm mit dieser Problemumgehung zu simulieren.