feb 202019
 

Flashen van de Arduino met Pololu USB AVR Programmer v2

Flashen van de Arduino met Pololu USB AVR Programmer v2

Jan Kromhout (mijn Forth-maatje) heeft me uitgelegd hoe je de Arduino UNO kan programmeren (‘laden’ of ‘flashen’) met een externe programmer.
Op deze manier kan je naast de bij Arduino-gebruikers bekende ‘sketches’ ook andere software in de Arduino flashen.

Ik gebruik deze methode om amforth in de Arduino UNO te flashen.
Met dezelfde programmer (Pololu USB AVR Programmer v2[1] voor een paar euro’s te koop) kan ik overigens ook de inhoud van de Arduino uitlezen en op mijn computer opslaan voor toekomstig gebruik of als backup.

In een paar stappen werkt het flashen als volgt:

  1. Sluit de Programmer aan op een USB-poort, terwijl de Arduino op de andere USB-poort is aangesloten
  2. Sluit de flat-cable van de Programmer aan op de SIP-connector van de Arduino
  3. Bepaal het adres van de bijbehorende USB-poort[2]
    • Neem in geval van twee nieuwe USB-adressen degene met het laagste nummer.
    • In mijn geval (MacbookAir) tty.usbmodem002163242
  4. Download de twee te flashen bestanden en zet die in de ~/avrdude map
    • Voor amforth zijn dat een uno.hex en een uno.eep.hex bestand
  5. Flash de code met avrdude[3] naar de Arduino met 2 regels Terminal commando:
    cd avrdude
    avrdude -p m328p -c avrispv2 -P /dev/tty.usbmodem002163242 -U efuse:w:0xFF:m -U hfuse:w:0xD9:m -U lfuse:w:0xFF:m -U flash:w:uno.hex:i -U eeprom:w:uno.eep.hex:i

Speciaal voor amforth



  1. De Pololu USB AVR Programmer v2 kan besteld worden op https://opencircuit.nl/Product/12116/Pololu-USB-AVR-Programmer-v2  ↩
  2. Bepalen USB-poort adres met Terminal commando:  `ls -l /dev/usb
    N.B. Vergeet de twee asterisks niet!  ↩
  3. Het programma avrdude is op de Mac te installeren met het terminal-commando:

    homebrew install avrdude
    of te downloaden/installeren via een link op de Polulu site  ↩

dec 222018
 

Ik vond ergens een eenvoudige manier om forth te benchmarken. de in de vorige post beschreven GGD berekening is daar een prima hulpmiddel bij.

De benchmark bestaat uit de berekening van de GGD voor alle combinaties van getallen tussen 0 en n.

: benchmark ( n -- )  
dup  
0 do  
dup 0 do  
j i ggd drop  
loop  
loop  
drop  
;  

Het resultaat voor de getallen tussen 0 en 200:
amforth: 8 sec.
dec 222018
 

Om tijdens testen van forth code even te gluren naar de inhoud en diepte van de stack kan je zelf het volgende in amForth maken:

variable maxdepth-.s \ definieer een variabele
#50 maxdepth-.s !    \ >> Van bovenaf geteld maximaal aantal te tonen stack items

: .s ( -- ) \ toont  en de bovenste stack items
   ." <" depth 0 .r ." > " \ print aantal items
   depth 0 max maxdepth-.s @ min 
   dup 0 ?DO 
     dup i - pick .
   LOOP
   drop
  ;

Als het ‘word’ .s wordt aangeroepen resulteert dat in een regel met:
a) de diepte van de stack tussen ‘< >’, gevolgd door de daadwerkelijke items op de stack. De laatste is het bovenste item.

De inhoud van de stack wordt niet beïnvloed.

Uiteraard kan je -zoals met (bijan) alle words in forth- het word .s ook weer in nieuwe words opnemen.

dec 192018
 

Hoe bereken je de Grootste Gemene Deler (GGD) in Forth?

Dat doe je zo:

: ggd ( a b -- ggd )
begin
dup
while
swap over mod
repeat
drop
;

Zet nu twee getallen op de stack en laat ggd het werk doen. 

Na afloop staat de GGD op de stack.

nov 292018
 

Was ik eerst bezig met Raspberry Pi (hardware) in combinatie met Forth (programmeertaal), nu ben ik overgestapt naar Arduino en Forth.

Waarom?

a) De Arduino is een microcontroller die apparaten met enen en nullen of analoge signalen aanstuurt. Daardoor werk je ‘dichter op de hardware’.

b) Forth is een programmeeromgeving waarmee je heel dicht bij de hardware kan komen.

Het lijkt als het ware dus alsof ze beide voor elkaar gemaakt zijn.

Voor de Arduino maak ik gebruik van AmForth.

AmForth runs completely on the controller. It does not need additional hardware. It makes no restrictions for hardware extensions that can be connected to the controller. The default command prompt is in a serial terminal.