Getting started with Arduino and WIZ820io

(Difference between revisions)
Jump to: navigation, search
Line 24: Line 24:
 
#Check the BOORST fuse bit
 
#Check the BOORST fuse bit
  
 
+
[[File:Avr sdudio 6 fuse bits bootloader.PNG|frame|center]]
  
  

Revision as of 15:25, 17 February 2013

Used Hardware:

To get started an Arduino Duemilanove board is used with an Arduino prototyping shield and prototyping jump wires.

To get the 3.3V for the WIZ820io power supply an voltage regulator is needed to transform the 5V from the Arduino board to 3.3V.

(The maximum current draw from FTDI chip on the Arduino Duemilanove is max. 50mA and therefore not usable to power the WIZ820io)


Used Bootloader:

You can use the Arduino bootloader but in this example an AVRISP MKII is used to flash an Bascom-AVR Bootloader.

For this you need an AVRISP MKII and AVR Studio to flash the bootloader on the Atmega328P on the Arduino.


Steps:

  1. Open AVR Studio 6
  2. Hit Tools >>> Device Programming
  3. Select AVRISP mkII under Tools and Select ATMEGA328P under devices and hit Apply button
  4. Check the BOORST fuse bit
Avr sdudio 6 fuse bits bootloader.PNG


Following you can find the Bootloader written in Bascom-AVR which works with baud rate of 57600baud:

$crystal = 16000000 'Arduino is running at 16MHz
$baud = 57600 '57600 Baud
$timeout = 900000
 
$regfile = "m328pdef.dat"
$loader = $3c00 'sets the bootsize to 1024 words under flash size
Const Pagemsb = 6 '64 words in a page reguires 6 bits
 
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
 
Dim Retries As Byte
Dim Receivedbyte As Byte
Dim Kindofdata As Byte
Dim Spmcsrvalue As Byte
Dim Calculatedchecksum As Byte
Dim Receivedblock As Byte
Dim Countedblock As Byte
Dim Invertedblock As Byte
Dim Receivedchecksum As Byte
Dim Receivedbytes(128) As Byte
Dim J As Byte
Dim Vl As Byte
Dim Vh As Byte
Dim Wrd As Word
Dim Page As Word
Dim Z As Long
 
Disable Interrupts
 
Const Maxword =(2 ^ Pagemsb) * 2
Const Zpagemsb = Pagemsb + 1
Const Soh = &H01
Const Stx = &H02
Const Eot = &H04
Const Ack = &H06
Const Nak = &H15
Const Can = &H18
 
Retries = 5
Testformagicbyte:
Receivedbyte = Waitkey()
Print Chr(receivedbyte);
If Receivedbyte = 123 Then
 Kindofdata = 0
 Goto Loader
Elseif Receivedbyte = 124 Then
 Kindofdata = 1
 Goto Loader
Elseif Receivedbyte <> 0 Then
 Decr Retries
 If Retries <> 0 Then Goto Testformagicbyte
End If
Goto _reset
 
Loader:
Do
 Receivedbyte = Waitkey()
Loop Until Receivedbyte = 0
 
If Kindofdata = 0 Then
 Spmcsrvalue = 3 : Gosub Do_spm
 Spmcsrvalue = 17 : Gosub Do_spm
End If
Retries = 10
 
Do
 Calculatedchecksum = 0
 Print Chr(nak);
 Do
 Receivedbyte = Waitkey()
 Select Case Receivedbyte
 Case &H01: '<SOH>
 Incr Countedblock
 Calculatedchecksum = 1
 Receivedblock = Waitkey()
 Calculatedchecksum = Calculatedchecksum + Receivedblock
 Invertedblock = Waitkey()
 Calculatedchecksum = Calculatedchecksum + Invertedblock
 For J = 1 To 128
 Receivedbytes(j) = Waitkey()
 Calculatedchecksum = Calculatedchecksum + Receivedbytes(j)
 Next
 Receivedchecksum = Waitkey()
 If Countedblock = Receivedblock Then
 If Receivedchecksum = Calculatedchecksum Then
 Gosub Writepage
 Print Chr(ack);
 Else
 Print Chr(nak);
 End If
 Else
 Print Chr(nak);
 End If
 Case &H04: '<EOT>
 If Wrd > 0 And Kindofdata = 0 Then
 Wrd = 0
 Spmcsrvalue = 5 : Gosub Do_spm
 Spmcsrvalue = 17 : Gosub Do_spm
 End If
 Print Chr(ack);
 Waitms 20
 Goto _reset
 Case &H18: '<CAN>
 Goto _reset
 Case Else
 Exit Do
 End Select
 Loop
 
 If Retries > 0 Then
 Waitms 1000
 Decr Retries
 Else
 Goto _reset
 End If
Loop
 
Writepage:
If Kindofdata = 0 Then
 For J = 1 To 128 Step 2
 Vl = Receivedbytes(j)
 Vh = Receivedbytes(j + 1)
 lds r0, {vl}
 lds r1, {vh}
 Spmcsrvalue = 1 : Gosub Do_spm
 Wrd = Wrd + 2
 If Wrd = Maxword Then
 Wrd = 0
 Spmcsrvalue = 5 : Gosub Do_spm
 Spmcsrvalue = 17 : Gosub Do_spm
 Page = Page + 1
 Spmcsrvalue = 3 : Gosub Do_spm
 Spmcsrvalue = 17 : Gosub Do_spm
 End If
 Next
Else
 For J = 1 To 128
 Writeeeprom Receivedbytes(j) , Wrd
 Wrd = Wrd + 1
 Next
End If
Return
 
Do_spm:
 Bitwait Spmcsr.0 , Reset
 Bitwait Eecr.1 , Reset
 Z = Page
 Shift Z , Left , Zpagemsb
 Z = Z + Wrd
 lds r30, {Z}
 lds r31, {Z + 1}
 #if _romsize > 65536
 lds r24, {Z + 2}
 sts rampz, r24
 #endif
 Spmcsr = Spmcsrvalue
 spm
 nop
 nop
Return
Personal tools
Namespaces
Variants
Actions
Navigation
Language