Tips and tricks

From MCS Wiki AVR
(Difference between revisions)
Jump to: navigation, search
 
Line 43: Line 43:
 
<span style="font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);">&nbsp;</span>
 
<span style="font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);">&nbsp;</span>
  
<span class="f_Header">5. To split a word into High byte and Low byte</span>&nbsp;you can also use&nbsp;[[HIGH]]&nbsp;and&nbsp;[[LOW]]
+
<span class="f_Header">5. To split a word into High byte and Low byte</span>&nbsp;you can also use&nbsp;&lt;a _fcknotitle="true" href="HIGH"&gt;HIGH&lt;/a&gt;&nbsp;and&nbsp;&lt;a _fcknotitle="true" href="LOW"&gt;LOW&lt;/a&gt;
  
 
&nbsp;
 
&nbsp;
Line 91: Line 91:
 
&nbsp;
 
&nbsp;
  
The utility has been updated and now will retrieve all info from the source file, but only when your main program contains these directive :
+
The utility has been updated and now will retrieve all info from the source file, but only when your main program contains these directive&nbsp;:
  
 
$regfile, $hwstack, $swstack, $framesize
 
$regfile, $hwstack, $swstack, $framesize
Line 97: Line 97:
 
&nbsp;
 
&nbsp;
  
<span style="font-weight: bold;">Example :</span>
+
<span style="font-weight: bold;">Example&nbsp;:</span>
  
 
bascomp.exe "c:\my folder\source\sample.bas" auto
 
bascomp.exe "c:\my folder\source\sample.bas" auto
Line 109: Line 109:
 
<span class="f_Header">9. You can use $initmicro if you want to run special tasks at startup:</span>
 
<span class="f_Header">9. You can use $initmicro if you want to run special tasks at startup:</span>
  
See&nbsp;[[$INITMICRO]]
+
See&nbsp;&lt;a _fcknotitle="true" href="%24INITMICRO"&gt;$INITMICRO&lt;/a&gt;
  
 
&nbsp;
 
&nbsp;
  
<span class="f_Header">10. You can use $include&nbsp;</span><span class="f_Header">to make larger projects better readable</span>: See&nbsp;<span style="font-size: 12pt; font-family: 'Times New Roman';">[[$INCLUDE]]</span>
+
<span class="f_Header">10. You can use $include&nbsp;</span><span class="f_Header">to make larger projects better readable</span>: See&nbsp;<span style="font-size: 12pt; font-family: 'Times New Roman';">&lt;a _fcknotitle="true" href="%24INCLUDE"&gt;$INCLUDE&lt;/a&gt;</span>
  
 
&nbsp;
 
&nbsp;
Line 123: Line 123:
 
a. Check fuse bit settings
 
a. Check fuse bit settings
  
b. Are the AVR pins are OK ?
+
b. Are the AVR pins are OK&nbsp;?
  
 
&nbsp;
 
&nbsp;
Line 155: Line 155:
 
<span class="f_Header">12. With the Lib Manager you can compile a Library (*.lib) into an *.lbx file.</span>
 
<span class="f_Header">12. With the Lib Manager you can compile a Library (*.lib) into an *.lbx file.</span>
  
See here:&nbsp;[[Tools_LIB_Manager|Tools LIB Manager]]
+
See here:&nbsp;&lt;a href="Tools%20LIB%20Manager"&gt;Tools LIB Manager&lt;/a&gt;
  
 
&nbsp;
 
&nbsp;
Line 163: Line 163:
 
<span class="f_Header">13. There is a timeout function for hardware and software UART</span>
 
<span class="f_Header">13. There is a timeout function for hardware and software UART</span>
  
See&nbsp;[[$TIMEOUT]]
+
See&nbsp;&lt;a _fcknotitle="true" href="%24TIMEOUT"&gt;$TIMEOUT&lt;/a&gt;
  
 
&nbsp;
 
&nbsp;
Line 171: Line 171:
 
<span class="f_Header">14. How to use the Powerdown function:</span>
 
<span class="f_Header">14. How to use the Powerdown function:</span>
  
See also:&nbsp;[[CONFIG_POWERMODE|CONFIG POWERMODE]]
+
See also:&nbsp;&lt;a href="CONFIG%20POWERMODE"&gt;CONFIG POWERMODE&lt;/a&gt;
  
 
<span style="font-size: 8pt; font-family: Courier;">&nbsp;</span>
 
<span style="font-size: 8pt; font-family: Courier;">&nbsp;</span>
Line 181: Line 181:
 
&nbsp;
 
&nbsp;
  
Examples for 3.3Volt Low Quiescent Current LDO Regulator :
+
Examples for 3.3Volt Low Quiescent Current LDO Regulator&nbsp;:
 
<div style="padding: 0px; margin: 0px 0px 0px 24px;">
 
<div style="padding: 0px; margin: 0px 0px 0px 24px;">
 
{| border="0" cellpadding="0" cellspacing="0"
 
{| border="0" cellpadding="0" cellspacing="0"
Line 216: Line 216:
  
 
&nbsp; &nbsp; &nbsp; &nbsp;<span style="font-family: 'Courier New'; color: rgb(0, 128, 0);">' on Portb.1 which is the PowerDown wake-up</span><br/><span style="font-family: 'Courier New'; font-weight: bold; color: rgb(0, 0, 128);">Loop</span><br/><span style="font-family: 'Courier New'; color: rgb(0, 128, 0);">'###############################################################################</span><br/><span style="font-family: 'Courier New'; font-weight: bold; color: rgb(0, 0, 128);">End</span><br/><span style="font-family: 'Courier New';">&nbsp;</span><br/><span style="font-family: 'Courier New';">Int0_isr</span><span style="font-family: 'Courier New'; color: rgb(255, 0, 0);">:</span><br/><span style="font-family: 'Courier New'; color: rgb(0, 128, 0);">' wake_up</span><br/><span style="font-family: 'Courier New'; font-weight: bold; color: rgb(0, 0, 128);">Return</span>
 
&nbsp; &nbsp; &nbsp; &nbsp;<span style="font-family: 'Courier New'; color: rgb(0, 128, 0);">' on Portb.1 which is the PowerDown wake-up</span><br/><span style="font-family: 'Courier New'; font-weight: bold; color: rgb(0, 0, 128);">Loop</span><br/><span style="font-family: 'Courier New'; color: rgb(0, 128, 0);">'###############################################################################</span><br/><span style="font-family: 'Courier New'; font-weight: bold; color: rgb(0, 0, 128);">End</span><br/><span style="font-family: 'Courier New';">&nbsp;</span><br/><span style="font-family: 'Courier New';">Int0_isr</span><span style="font-family: 'Courier New'; color: rgb(255, 0, 0);">:</span><br/><span style="font-family: 'Courier New'; color: rgb(0, 128, 0);">' wake_up</span><br/><span style="font-family: 'Courier New'; font-weight: bold; color: rgb(0, 0, 128);">Return</span>
 +
 +
 +
 +
{{Languages}}
 +
 +
[[Category:BASCOM_Language_Fundamentals]]

Latest revision as of 21:22, 24 August 2013

Tips & Tricks:

 

1. You can specify a binary number with the &B and you can use underscore "_" like:

 

Dim Var As Byte
 
Var = &B00_110000
Var = &B0000_1111
Var = &B00_11_00_11

 

 

2. How to use longer formulas:

 

Dim A As Byte
Dim B As Byte
Dim C As Byte
 
' Now you want to use following formula: a = B / 4 + C
' In Bascom you write
 
= B / 4
= A + C

 

 

3. You can use more than one Bascom statement in one line with colons ":"

 

Dim A As Byte
Dim B As Byte
Dim C As Byte
 
' Now you want to use following formula: a = B / 4 + C
' In Bascom you write
 
= B / 4 : A = A + C

 

4. You can use overlay to have easy access to the low byte and high byte of a WORD

(the same approach also work for e.g. LONG)

 

Dim My_word As Word
Dim Low_byte As Byte At My_word Overlay
Dim High_byte As Byte At My_word + 1 Overlay
 
Low_byte = &B0000_1111
High_byte = &B1111_0000
 
' This is how it will be stored in SRAM
' <-------my_word-------->
' +-----------+----------+
' | Low_byte  |High_byte |
' +-----------+----------+

 

 

5. To split a word into High byte and Low byte you can also use <a _fcknotitle="true" href="HIGH">HIGH</a> and <a _fcknotitle="true" href="LOW">LOW</a>

 

6. Here is a way to print the content of a variable or AVR register:

 

Use Print Bin(X)

 

Example:

 

$regfile = "m88def.dat"                                        ' we use the M88
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 8
$framesize = 24
 
 
Dim A As Byte
 
= &B00000001
= A * 2
Print Bin(a)       
 
End                                                              ' end program

 

 

7. If you do not want that Bascom-AVR is sending Carriage +  Return after a print command use semi-colon ";"  after the print funtion:

 

Example:

 

$regfile = "m88def.dat"                                            ' specify the used micro
$crystal = 8000000                                              ' used crystal frequency
$baud = 19200                                                    ' use baud rate
$hwstack = 32                                                    ' default use 32 for the hardware stack
$swstack = 10                                                    ' default use 10 for the SW stack
$framesize = 40                                                  ' default use 40 for the frame space
 
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
 
Print "Hello World" ;
 
End

 

 

8. For the user who want to use external editors:

 

The bascomp.exe has been updated. It can be downloaded from the download section.

 

It now supports a simpler way to be called.

 

The utility has been updated and now will retrieve all info from the source file, but only when your main program contains these directive :

$regfile, $hwstack, $swstack, $framesize

 

Example :

bascomp.exe "c:\my folder\source\sample.bas" auto

 

The 'auto' is a switch so the utility will retrieve the settings from your code.

 

9. You can use $initmicro if you want to run special tasks at startup:

See <a _fcknotitle="true" href="%24INITMICRO">$INITMICRO</a>

 

10. You can use $include to make larger projects better readable: See <a _fcknotitle="true" href="%24INCLUDE">$INCLUDE</a>

 

11. Your LCD is not working and you need a list of steps what do check:

 

a. Check fuse bit settings

b. Are the AVR pins are OK ?

 

To test the AVR pins you can do following:

Write a program that toggles all the lcd pins and then measure the logic level.

Then check with a DVM or led-series resistor if all pins change level. if they do, there is a problem with the lcd

 

If the pin do not toggle:

- pin defect

- track or solder problem.

 

Here the test program:

 

$regfile = "m328pdef.dat"                                  ' Specify The Used Micro
$crystal = 16000000                                          ' used crystal frequency
$baud = 19200                                                ' use baud rate
$hwstack = 32                                                ' default use 32 for thehardware stack
$swstack = 10                                                ' default use 10 for theSW stack
$framesize = 40                                              ' default use 40 for theframe space
 
Config Clockdiv = 1                                          ' divide xtal clock by 1, default fuse bit is set                                                                                                ' to 8 by elektor
 
Config Portc.= Output                                      ' RW
Config Portd.= Output                                      ' Db4
Config Portd.= Output                                      ' Db5
Config Portd.= Output                                      ' Db6
Config Portd.= Output                                      ' Db7
Config Portc.= Output                                      ' E
Config Portc.= Output                                      ' RS
 
do
  toggle portc
  toggle portd
  waitms 1000
Loop
 
End                                                    ' end program

 

 

12. With the Lib Manager you can compile a Library (*.lib) into an *.lbx file.

See here: <a href="Tools%20LIB%20Manager">Tools LIB Manager</a>

 

 

13. There is a timeout function for hardware and software UART

See <a _fcknotitle="true" href="%24TIMEOUT">$TIMEOUT</a>

 

 

14. How to use the Powerdown function:

See also: <a href="CONFIG%20POWERMODE">CONFIG POWERMODE</a>

 

If you can not measure the same power down current as written in the data sheet you also need to use a

Low Quiescent Current LDO Regulator to meet that specs (if you measure the current including the Current LDO Regulator).

 

Examples for 3.3Volt Low Quiescent Current LDO Regulator :

MCP1702 --> typical 2µA
MCP1700 --> typical 1.6µA
AS1375 low power LDO --> 1µA (typ.) of quiescent current
TPS78233 3,3V --> 0.4µA

 
' Using the new config powermode = PowerDown function with ATTINY13
 
' Used Bascom-AVR Version 2.0.7.3
 
' Fuse Bits:
' Disable DWEN (Debug Wire) Fuse Bit
' Disable Brown-Out Detection in Fuse Bits
' Disable Watchdog in Fuse Bits
 
' You can also just use  Config Powermode = Powerdown
 
' But this example here also considers what the data sheet write under "MINIMIZING POWER CONSUMPTION"
' You need to follow this when you want to achieve the current consumption which you find in the

' data sheet under Powerdown Mode.
 
' 1. Disable/Switch off ADC
' 2. Disable/Switch off Analog Comparator
' 3. Disable Brown-out Detection when not needed
' 4. Disable internal voltage reference
' 5. Disable Watchdog Timer when not needed
' 6. Disable the digital input buffer
' 7. Enable Pull-up or pull-down an all unused pins
 
$regfile = "attiny13.dat"
$crystal = 9600000                                      ' 9.6MHz
$hwstack = 10
$swstack = 0
$framesize = 24
 
On Int0 Int0_isr                                          ' INT0 will be the wake-up source for Powerdown Mode
Config Int0 = Low Level
Enable Int0
 
' Prepare Powerdown:
' To minimize power consumption, enable pull-up or -down on all unused pins, and
' disable the digital input buffer on pins that are connected to analog sources
Config Portb.= Input
Set Portb.0
Config Portb.= Input                                    ' INT0 --> external 47K pull-up
'Set Portb.1
Config Portb.= Input
Set Portb.2
Config Portb.= Input
Set Portb.3
Config Portb.= Input
Set Portb.4
Config Portb.= Input                                    ' External Pull-Up (Reset)
 
Didr0 = Bits(ain1d , Ain0d)                              ' Disable digital input buffer on the AIN1/0 pin
 
Set Acsr.acd                                              ' Switch off  the power to the Analog Comparator
' alternative:
' Stop Ac
 
Reset Acsr.acbg                                          ' Disable Analog Comparator Bandgap Select
 
Reset Adcsra.aden                                      ' Switch off ADC
' alternative:
' Stop Adc
 
'###############################################################################
Do
       Wait 3                                                ' now we have 3 second to measure the Supply Current

                                                                       ' in Active Mode
         Enable Interrupts
         ' Now call Powerdown function
         Config Powermode = Powerdown

       ' Here you have time to measure PowerDown current consumption until a Low Level

       ' on Portb.1 which is the PowerDown wake-up
Loop
'###############################################################################
End
 
Int0_isr:
' wake_up
Return


Languages   English Deutsch  
Personal tools
Namespaces
Variants
Actions
Navigation
In other languages
Language