Autor Thema: Timer-Problem pic 16F1938  (Gelesen 5030 mal)

Offline 1987_ew

  • Newbie
  • *
  • Beiträge: 6
    • Profil anzeigen
Timer-Problem pic 16F1938
« am: November 13, 2012, 10:01:28 Vormittag »
Hallo,
versuch gerade einen Pic 16F1938 zu programmieren, dabei treten doch einige Probleme auf. Programmiere in C mit einem GCC compailer.
Timer0  funktioniert soweit.
Nun versuchte ich das ganze mit Timer 4, den ich aber bisher nicht zum laufen bekommen habe.
Für TMR4ON hab ich 0x417.2 als Adresse wie im Datenblatt angegeben. Sowie für TMR4IF die Adresse 0x13.1
Im Hauptprogramm hab ich dann die Funktion setup_timer_4(T4_DIV_BY_16,250,1);,sowie den richtigen Interrupt enabled und Danach TMR4ON auf eins gesetzt, da dies ja zum ein und ausschalten von Timer 4 ist, wenn ich das richtig verstanden habe.
wäre sehr hilfreich,wenn ihr mir da helfen könntet.

http://www.farnell.com/datasheets/1669458.pdf
Link zum Datenblatt




« Letzte Änderung: November 13, 2012, 15:45:23 Nachmittag von 1987_ew »

Offline Stampede

  • Hero Member
  • *****
  • Beiträge: 1026
    • Profil anzeigen
    • PicPlayer.de
Re:Timer-Problem pic 16F1938
« Antwort #1 am: November 14, 2012, 17:21:32 Nachmittag »
Code posten!

GRüße
Stefan

Offline 1987_ew

  • Newbie
  • *
  • Beiträge: 6
    • Profil anzeigen
Re:Timer-Problem pic 16F1938
« Antwort #2 am: November 15, 2012, 12:47:07 Nachmittag »
oh ok, sorry hab ich vergessen.
hier ist nun mein Code.

Offline 1987_ew

  • Newbie
  • *
  • Beiträge: 6
    • Profil anzeigen
Re:Timer-Problem pic 16F1938
« Antwort #3 am: November 21, 2012, 11:39:35 Vormittag »
Kann mir denn hier keiner helfen?
Ich verstehe nicht warum der Timer2 interrupt nie auslöst.
Bin schon ewig dran und komm einfach nicht weiter.
Hab es nun mal bei einem PIC 16F87 versucht, aber da geht auch nichts. Register hab ich laut Datenblatt gesetzt.
Hier der Code:

Sourcefile:

#include "K:\Produktion\Pool\_ff\BA_Arbeit_Weiss\test_16f87.h"
  #ZERO_RAM
 
volatile int16 counter=0;

#int_TIMER0
void  TIMER0_isr(void)
{
   disable_interrupts(INT_TIMER0);
   TMR0IF = 0;
   counter++;
   if(counter == 31)
   {
      counter=0;
      output_toggle(LED);
   }
}
#int_TIMER2
void  TIMER2_isr(void)

   output_high(LED);
   disable_interrupts(INT_TIMER2);
   TMR2IF = 0;
   counter++;
   if(counter == 125)
   {
      counter=0;
      output_toggle(LED);
   }
}


void main()
{

   setup_oscillator(OSC_8MHZ|OSC_NORMAL);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);
   setup_timer_2(T2_DIV_BY_16,250,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   //enable_interrupts(INT_RDA);
   //enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);
   
   
   output_a(0);
   output_b(0);

   // Port Input/Output festlegen    1 -> Input, 0 -> Output
   set_tris_a(0b00100000);    // LED, S4, MCLR, RA4, S3, S2, S1, S0
   set_tris_b(0b01000100);    // PGD, PGC/Count_In, TX, RB4, RB3, RX, RB1, RB0
   
   while(1)
   {
      //enable_interrupts(INT_TIMER0);
      TMR2ON=1;
      enable_interrupts(INT_TIMER2);
   }

}
Headerdatei:

#include <16F87.h>
#include <STDLIB.H>
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(b)

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES PUT                      //Power Up Timer
#FUSES MCLR                     //Master Clear pin enabled
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES IESO                     //Internal External Switch Over mode enabled


#define S0   PIN_A0
#define S1   PIN_A1
#define S2   PIN_A2
#define S3   PIN_A3
#define S4   PIN_A6
#define LED  PIN_A7
#define tLED1 PIN_B3
#define tLED2 PIN_B4
#define VALUE_TIMER0 0
#define Rx   PIN_B2

#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=8)

#byte TMR0 = 0x1     // Timer0 Register
#bit TMR0IF = 0xb.2  // Timer0 Interrupt-Flag
#bit TMR2ON = 0x12.2 // Timer2 enable
#bit TMR2IF = 0xC.1
#bit RCIF = 0xc.5    // RS232 Receiver Flag
#byte RCREG = 0x1a   // Receive Register
#bit OERR = 0x18.1   // Overrun Error
#bit FERR = 0x18.2   // Framing Error
#bit CREN = 0x18.4   // Continuous Receive

 


* Recent Topics