RFID medicine teller!! problem with programming


Closed Thread
Results 1 to 23 of 23

Hybrid View

  1. #1
    Join Date
    Nov 2008
    Posts
    11


    Did you find this post helpful? Yes | No

    Default

    erm... easy way..
    i want setting the time 12:10:00 am/pm on my LCD display
    how to program it?? as i know is:

    if hour = 12 and minute = 10 second = 00 then run

    run:
    reqout#(code) and so on...


    can you help me correct it? whereby that i have wrong with the program.

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by sknee8787 View Post
    can you help me correct it? whereby that i have wrong with the program.
    Post the code you wrote and we will see what is wrong.
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    Nov 2008
    Posts
    11


    Did you find this post helpful? Yes | No

    Default

    My design.txt

    the error is start from mainloop.

  4. #4
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Some of the things I see are Variable that have not been declared.
    This is not like some basics, in PBP all variables have to be defined
    For example:
    MYVAR VAR BYTE

    A label name can only be used once.
    You have bad_tag used at least twice.

    Read through the code you have and see if it flows the way you want it.
    You may find it easier to write your own from scratch and not do a copy paste. That is what it looks like to me.

    Below is the code as you have it posted in code brackets
    Make it easier for people to see and maybe help you.
    Code:
     
    ' LCD clock program using On Interrupt
    '  Uses TMR0 and prescaler.  Watchdog Timer should be
    '  set to off at program time and Nap and Sleep should not be used.
    '  Buttons may be used to set time
    
    define LOADER_USED 1
    define OSC 4
    define LCD_DREG PORTB
    DEFINE LCD_DBIT 0
    DEFINE LCD_RSREG PORTB
    DEFINE LCD_RSBIT 5
    DEFINE LCD_EREG PORTB
    DEFINE LCD_EBIT 4
    DEFINE LCD_BITS 4
    
    adcon1 = 7
    trisa = %11111111
    
    
    hour    var     byte    ' Define hour variable
    dhour   var     byte    ' Define display hour variable
    minute  var     byte    ' Define minute variable
    second  var     byte    ' Define second variable
    ticks   var     byte    ' Define pieces of seconds variable
    update  var     byte    ' Define variable to indicate update of LCD
    
    i       var     byte    ' Debounce loop variable
    
    @       device WDT_OFF
    
            CMCON = 7       ' PORTA digital
    
            Pause 100       ' Wait for LCD to startup
    
            hour = 0        ' Set initial time to 00:00:00
            minute = 0
            second = 0
            ticks = 0
            update = 1      ' Force first display
    
    ' Set TMR0 to interrupt every 16.384 milliseconds
    
            OPTION_REG = $55        ' Set TMR0 configuration and enable PORTB pullups
            INTCON = $a0            ' Enable TMR0 interrupts
            On Interrupt Goto tickint
            PORTB = 0       ' PORTB lines low to read buttons
            TRISB = %11001111       ' Enable buttons
    
    ' Main program loop - in this case, it only updates the LCD with the time
    mainloop:
            ' Check any button pressed to set time
            If PORTa.2 = 1 Then decmin
            If PORTA.3 = 1 Then incmin
    
            ' Check for time to update screen
    chkup:  If update = 1 Then
                    Lcdout $fe, 1   ' Clear screen
                    lcdout $FE,$c0,"12:10:00"
    
                    ' Display time as hh:mm:ss
                    dhour = hour    ' Change hour 0 to 12
                    If (hour // 12) = 0 Then
                            dhour = dhour + 12
                    Endif
    
                    ' Check for AM or PM
                    If hour < 12 Then
                            Lcdout dec2 dhour, ":", dec2 minute, ":", dec2 second, " AM"
                    Else
                            Lcdout dec2 (dhour - 12), ":", dec2 minute, ":", dec2 second, " PM"
                    Endif
                    update = 0      ' Screen updated
            Endif
            if hour = 12 and minute = 10 and second = 00 then run
    run:
    
    next
    bad_tag:
    low porta.3   'green LED
    pause 500
    high portc.0   'red LED
    tagnum = 0
    lcdout $FE,1,"Sorry Wrong medicine"
    freqout portC.5,1000*/$100,115*/$100
    pause 3000
    serin2 portc.0,84,[str buf\10]
    for tagnum = 1 to 2
    for idx = 0 to 9
    read(((tagnum-1)*10)+idx),char
    if(char<>buf(idx)) then goto bad_char
    next 
    
    goto tag_found_unlock
    bad_char:
    next
    
    bad_tag:
    low porta.3
    pause 500
    high portc.0
    tagnum = 0
    lcdout $FE,1,"Incorrect~!!"
    freqout portC.5,1000*/$100,115*/$100
    pause 3000
    goto main
    
    tag_found_unlock
    low portc.0
    high porta.3
    freqout portC.5,2000*/$100,880*/$100
    lcdout $FE,1,"Correct"
    lcdout $FE,$c0,"right medicine!!"
    high porta.3
    
            Goto mainloop   ' Do it all foreve
    ' Increment minutes
    incmin: minute = minute + 1
            If minute >= 60 Then
                   minute = 0
                    hour = hour + 1
                    If hour >= 24 Then
                            hour = 0
                    Endif
            Endif
            Goto debounce
    
    ' Decrement minutes
    decmin: minute = minute - 1
            If minute >= 60 Then
                    minute = 59
                    hour = hour - 1
                    If hour >= 24 Then
                            hour = 23
                    Endif
            Endif
    
    ' Debounce and delay for 250ms
    debounce: For i = 1 to 25
            Pause 10        ' 10ms at a time so no interrupts are lost
            Next i
            update = 1      ' Set to update screen
            Goto chkup
    
    ' Interrupt routine to handle each timer tick
            disable         ' Disable interrupts during interrupt handler
    tickint: ticks = ticks + 1      ' Count pieces of seconds
            If ticks < 61 Then tiexit       ' 61 ticks per second (16.384ms per tick)
    
    ' One second elasped - update time
            ticks = 0
            second = second + 1
            If second >= 60 Then
                   second = 0
                    minute = minute + 1
                    If minute >= 60 Then
                            minute = 0
                            hour = hour + 1
                            If hour >= 24 Then
                                    hour = 0
                            Endif
                    Endif
            Endif
            update = 1      ' Set to update LCD
    tiexit: INTCON.2 = 0    ' Reset timer interrupt flag
            Resume
    
            End
    Dave
    Always wear safety glasses while programming.

  5. #5
    Join Date
    Nov 2008
    Posts
    11


    Did you find this post helpful? Yes | No

    Default

    ok.. thanks for your help..
    i will try it

    if i found that have any problem then i will post again.

  6. #6
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    This piece of code is wrong!

    Code:
    ' Decrement minutes
    decmin: minute = minute - 1
            If minute >= 60 Then
                    minute = 59
                    hour = hour - 1
                    If hour >= 24 Then
                            hour = 23
                    Endif
            Endif
    Al.
    All progress began with an idea

  7. #7
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    Not really...
    if minutes was 0, if you decrement it and it's a BYTE, this will gives you...255... same apply to hour.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

Similar Threads

  1. 16F676 programming problem
    By Christopher4187 in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 18th May 2009, 17:39
  2. PIC18F4620 Programming problem
    By JavPar in forum mel PIC BASIC Pro
    Replies: 15
    Last Post: - 6th December 2008, 04:21
  3. bh 1415f and picbasic problem
    By patricx in forum Off Topic
    Replies: 3
    Last Post: - 18th September 2007, 22:19
  4. Programming Problem with PIC16F819
    By Dick Ivers in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 24th July 2007, 18:42
  5. Problem programming the PIC16F648A
    By Edgardo_2 in forum General
    Replies: 2
    Last Post: - 29th December 2006, 00:02

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts