Welcome
Username or Email:

Password:


Missing Code




[ ]
[ ]
Online
  • Guests: 18
  • Members: 0
  • Newest Member: omjtest
  • Most ever online: 396
    Guests: 396, Members: 0 on 12 Jan : 12:51
Members Birthdays:
One birthday today, congrats!
Vaxian (17)


Next birthdays
05/21 Dalus (34)
05/21 Kizmo (37)
05/22 Skynet (32)
Contact
If you need assistance, please send an email to forum at 4hv dot org. To ensure your email is not marked as spam, please include the phrase "4hv help" in the subject line. You can also find assistance via IRC, at irc.shadowworld.net, room #hvcomm.
Support 4hv.org!
Donate:
4hv.org is hosted on a dedicated server. Unfortunately, this server costs and we rely on the help of site members to keep 4hv.org running. Please consider donating. We will place your name on the thanks list and you'll be helping to keep 4hv.org alive and free for everyone. Members whose names appear in red bold have donated recently. Green bold denotes those who have recently donated to keep the server carbon neutral.


Special Thanks To:
  • Aaron Holmes
  • Aaron Wheeler
  • Adam Horden
  • Alan Scrimgeour
  • Andre
  • Andrew Haynes
  • Anonymous000
  • asabase
  • Austin Weil
  • barney
  • Barry
  • Bert Hickman
  • Bill Kukowski
  • Blitzorn
  • Brandon Paradelas
  • Bruce Bowling
  • BubeeMike
  • Byong Park
  • Cesiumsponge
  • Chris F.
  • Chris Hooper
  • Corey Worthington
  • Derek Woodroffe
  • Dalus
  • Dan Strother
  • Daniel Davis
  • Daniel Uhrenholt
  • datasheetarchive
  • Dave Billington
  • Dave Marshall
  • David F.
  • Dennis Rogers
  • drelectrix
  • Dr. John Gudenas
  • Dr. Spark
  • E.TexasTesla
  • eastvoltresearch
  • Eirik Taylor
  • Erik Dyakov
  • Erlend^SE
  • Finn Hammer
  • Firebug24k
  • GalliumMan
  • Gary Peterson
  • George Slade
  • GhostNull
  • Gordon Mcknight
  • Graham Armitage
  • Grant
  • GreySoul
  • Henry H
  • IamSmooth
  • In memory of Leo Powning
  • Jacob Cash
  • James Howells
  • James Pawson
  • Jeff Greenfield
  • Jeff Thomas
  • Jesse Frost
  • Jim Mitchell
  • jlr134
  • Joe Mastroianni
  • John Forcina
  • John Oberg
  • John Willcutt
  • Jon Newcomb
  • klugesmith
  • Leslie Wright
  • Lutz Hoffman
  • Mads Barnkob
  • Martin King
  • Mats Karlsson
  • Matt Gibson
  • Matthew Guidry
  • mbd
  • Michael D'Angelo
  • Mikkel
  • mileswaldron
  • mister_rf
  • Neil Foster
  • Nick de Smith
  • Nick Soroka
  • nicklenorp
  • Nik
  • Norman Stanley
  • Patrick Coleman
  • Paul Brodie
  • Paul Jordan
  • Paul Montgomery
  • Ped
  • Peter Krogen
  • Peter Terren
  • PhilGood
  • Richard Feldman
  • Robert Bush
  • Royce Bailey
  • Scott Fusare
  • Scott Newman
  • smiffy
  • Stella
  • Steven Busic
  • Steve Conner
  • Steve Jones
  • Steve Ward
  • Sulaiman
  • Thomas Coyle
  • Thomas A. Wallace
  • Thomas W
  • Timo
  • Torch
  • Ulf Jonsson
  • vasil
  • Vaxian
  • vladi mazzilli
  • wastehl
  • Weston
  • William Kim
  • William N.
  • William Stehl
  • Wesley Venis
The aforementioned have contributed financially to the continuing triumph of 4hv.org. They are deserving of my most heartfelt thanks.
Forums
4hv.org :: Forums :: Computer Science
« Previous topic | Next topic »   

PIC Interrupts

Move Thread LAN_403
Turkey9
Wed Mar 17 2010, 05:18AM Print
Turkey9 Registered Member #1451 Joined: Wed Apr 23 2008, 03:48AM
Location: Boulder, Co
Posts: 661
Ok i'm stumped with this... I'm using a PIC16f690. I'm trying to use TIMER2 to generate an interrupt when ever it matches the PR1 value. This will be used to toggle a pin at around 20kHz in order to drive a flyback. The problem is, no matter what I do, I can't seem to get the code to jump to the interrupt routine! I've set all the bits to enable everything but it's just not working. I know the interrupt routine works as I can set it to interrupt on a pin change and it all works great. I also know the timer is working as I can simulate the code and the interrupt flag bit gets set at the right time and everything. Below is a little bit of the code that I'm using, the important part anyway.
org 0000h
goto    MAIN

org 0004h
bsf  PORTC,5
bcf  PIR1,TMR2IF
RETFIE

Why in the world won't this work? Oh by the way most of this is in MPLAB SIM but it doesn't work in real life either.
Back to top
Bjørn
Wed Mar 17 2010, 05:29AM
Bjørn Registered Member #27 Joined: Fri Feb 03 2006, 02:20AM
Location: Hyperborea
Posts: 2058
The short answer is that if it does not call the interrupt vector you set it up wrong. Without the rest of the code we have no idea what you did wrong.

Since the chip has a PWM module it can do what you need in hardware which is simpler and more reliable so why not do that instead?
Back to top
Turkey9
Wed Mar 17 2010, 07:13AM
Turkey9 Registered Member #1451 Joined: Wed Apr 23 2008, 03:48AM
Location: Boulder, Co
Posts: 661
I need it to run in the background, does the PWM do that? I mean that i can't have it constantly going through delay loops. The code is kinda confusing at the moment because i have goto's isolating the part i'm having problems with, so I'm not going to post it until i clean it up. I know i set bit 6&7 of the INTCON register and bit 1 of PIE1... Also TIMER2 is set to run of the clock and that works great... INTCON is listed in all the banks, does it matter which one i go to to set it? I know that PIE1 is in bank 1, so I just set the INTCON bits there. Am I I supposed to clear the register before setting bits to initialize it or something?

Ok here's the setup portion of the code:
#include <p16F690.inc>
      errorlevel -302 
     __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
     org 0000h
	
	goto	BEGIN

	org		 0x0004	
	bsf		 PORTC,5
	bcf		 PORTC,5
	bcf		 PIR1,TMR2IF
	RETFIE
	clrf	         INTCON
	bsf		 STATUS,RP0               
	movlw	 0fh
	movwf	 PR2                 
	clrf	         TRISB
	clrf	         TRISC
	movlw	 03fh
	movwf        TRISA
   	movlw        020h        
	movwf        OPTION_REG        
	bsf	         WPUA,0&1&2&4&5      
	movlw	 02h
	movwf	 PIE1		              
	bcf		 STATUS,RP0            
        bsf		 STATUS,RP1
	clrf	         ANSEL
	clrf	         ANSELH
	movlw	 060h
	movwf	 INTCON
	bcf 	         STATUS,RP1
	bcf		 PIR1,TMR2IF              
	clrf	         PORTB
	clrf	         PORTC

BEGIN:
Back to top
Bjørn
Wed Mar 17 2010, 07:58AM
Bjørn Registered Member #27 Joined: Fri Feb 03 2006, 02:20AM
Location: Hyperborea
Posts: 2058
The PWM unit lets you flip a pin instead of triggering an interrupt so it wil run completely independent of the CPU itself.
Back to top
Carbon_Rod
Wed Mar 17 2010, 08:47AM
Carbon_Rod Registered Member #65 Joined: Thu Feb 09 2006, 06:43AM
Location:
Posts: 1155
I have not dealt with the 16x690, but I do know a few other chips.

* The init vector is often org 0, but may be in other places depending on the chip
* The reset vector may also move
* Some PICs only have the interrupt on TMR0 overflow
* Some have buggy priority interrupt hardware (18f series)
* PWMs are generally better than interrupts, as you don't have to count machine cycles
(configure internal period & duty, and setup io/module)

The jump vector label BEGIN: skips most of your init code
(unless you are modifying the PC directly someplace else.)

Does this work on the 690?

org 0
goto BEGIN

org 0x0004 ;isr, check flags etc
bsf PORTC,5
bcf PORTC,5
RETFIE

BEGIN:
clrwdt
movlw b'00011110' ; turn wdt off
movwf WDTCON

movlw b'10000111' ; setup pre-scale
movwf OPTION_REG


clrf TRISC
clrf PORTC
clrf TMR0
movlw b'10100000' ; turn on T0IE isr
movwf INTCON

infloop:
nop
goto infloop

Back to top
Turkey9
Wed Mar 17 2010, 10:17PM
Turkey9 Registered Member #1451 Joined: Wed Apr 23 2008, 03:48AM
Location: Boulder, Co
Posts: 661
That code does compile but i haven't been able to simulate it yet.

Oh and the BEGIN label is at the beginning of the init code, I just put it in the wrong spot when I copied the code over, sorry!
Back to top

Moderator(s): Chris Russell, Noelle, Alex, Tesladownunder, Dave Marshall, Dave Billington, Bjørn, Steve Conner, Wolfram, Kizmo, Mads Barnkob

Go to:

Powered by e107 Forum System
 
Legal Information
This site is powered by e107, which is released under the GNU GPL License. All work on this site, except where otherwise noted, is licensed under a Creative Commons Attribution-ShareAlike 2.5 License. By submitting any information to this site, you agree that anything submitted will be so licensed. Please read our Disclaimer and Policies page for information on your rights and responsibilities regarding this site.