Re: [bascom] Fusing not working ...


From Brent Nelson <spock50@gte.net>
Date Mon, 27 Sep 1999 15:34:20 -0700

Hi Micheal,

 I tried out your sample program , and I get no errors, and using the 
simulator the lcd was updating and displaying   124.50Deg. C

Do you have the internal Ram setting correct?

To put the lcd on a data bus you must use  the $LCD = address directive. 
Bascom is using the settings found in the IDE.

Bascom is using the default settings so you only have 64 bytes of ram -  you 
have specify a processor or change the setting in the IDE.

Have Fun ,

Brent


"Michael W. Akers" wrote:

> Mark,
> Have a section of code that is bothering me, well two actually, that I need 
> some advice on.
>
> The first is:
> Dim Dispbuff As String * 40                                                 
>          <- I get an out of memory error. If I set it for 7 the compiler is 
> happy
>
> This is for use in the second problem spot.
> The next is:
>
> ' Create temperature word
> '   Put Lm75high in high byte position in Lm75temp word.
>     mov {Lm75temp+1},{Lm75high}
> '   Put Lm75low in low byte position in Lm75temp word.
>     mov {Lm75temp},{Lm75low}
> ' Now strip unused lower bits (least significant 7 bits)
>     Rotate Lm75temp , Right , 7
>     Dispval = Lm75temp * 0.5                                                
>          <- Every thing works fine to here
>     Dispbuff = Fusing(dispval , ###.##)                                     
>       <- But program Stops execution here!!!
> ' Now print the temp to the LCD
>     Cls                                                                     
>                          <- this part of the code never executes.
>     Lcd Dispbuff ; "Deg. C"                                                 
>              <-
>
> With Lm75high set to $B01111100 and Lm75low set to &B10000000 the final 
> result is 124.5 Deg. C if I have LCD Dispval ; "Deg. C" it prints out 
> 124.500000 Deg.  On the simulated LCD.
>
> But when using Fusing everything halts!
> Any Ideas?
>
> Michael Akers
>
> P.S. Here is the full program. (I'm helping Anders L. with accessing the 
> LM75 using I2C.
> '------------------------------------------------------------------------------
> ' Program Name           : lm75read.bas
> ' Program Date           : September 26,1999
> ' Program Written By     : Michael W. Akers
> '                          3800 Vineyard Ave. Apt. #E
> '                          Pleasanton, California 94566
> '                          Voice: +1 925 484 4750
> '                          Email: mwakers@home.com
> ' Program Purpose        : This program will demonstrate how to interface 
> to,
> '                          and communicate With The National Semiconductor 
> LM75
> '                          Digital Temperature Sensor.
> '------------------------------------------------------------------------------
> ' Programmer           Date        Comments
> ' -------------------  ----------  
> --------------------------------------------
> ' Michael Akers        09/26/1999  Initial creation of this program.
> ' Brent Nelson         09/27/1999  Usage uf assemble routines for byte/word
> '                                  manipulation. Reduces resource 
> requirements.
> '------------------------------------------------------------------------------
> ' Define all subroutines.
> ' Define variables and constants
>     Dim Lm75temp As Word
>     Dim Lm75write As Byte
>     Dim Lm75read As Byte
>     Dim Lm75high As Byte
>     Dim Lm75low As Byte
>     Dim Dispval As Single
>     Dim Dispbuff As String * 40
>
> ' Define configurations
>     Config Scl = P3.5
>     Config Sda = P3.7
>     Config I2cdelay = 1
>     Config Lcd = 40 * 4
> '   Assumption is that the 89C2051 uses Port1 to communicate with the LCD.
> ' Define Port and pin presets.
> ' Initialize variables as needed.
>     Lm75write = &B10010000
>     Lm75read = &B10010001
>     Lm75temp = 0
> ' Program start
> Start:
> ' Gather the temperature data from the LM75.
> '   Start the I2C system.
>     I2cstart
> '   Place the device in readback mode.
>     I2cwbyte Lm75read
> '   Read the High Byte. And ACK.
>     I2crbyte Lm75high , 8
> '   Read the Low Byte. And NACK.
>     I2crbyte Lm75low , 9
> '   Stop the I2C system.
>     I2cstop
> ' This code section to be removed when compiling for actual device.
>     Lm75high = &B01111100
>     Lm75low = &B10000000
> ' Create temperature word
> '   Put Lm75high in high byte position in Lm75temp word.
>     mov {Lm75temp+1},{Lm75high}
> '   Put Lm75low in low byte position in Lm75temp word.
>     mov {Lm75temp},{Lm75low}
> ' Now strip unused lower bits (least significant 7 bits)
>     Rotate Lm75temp , Right , 7
>     Dispval = Lm75temp * 0.5
>     Dispbuff = Fusing(dispval , ###.##)
> ' Now print the temp to the LCD
>     Cls
>     Lcd Dispbuff ; "Deg. C"
> Goto Start