Gepost door Jeroen Vreuls op donderdag 24 augustus 2023
Voor een goede werking moeten we de ontvanger uitlezen, er komt een signaal uit de ontvanger waarvan de pulsbreedte varieert tussen de 1 en 2 ms bij een frequentie van 50 Hz. Dit signaal moet omgezet worden naar een PWM-signaal voor de regelaar, die PWM waarde gaat variëren tussen de 0 en 255, een acht bit waarde dus.
Door nu een klein stukje code te schrijven kunnen we achter die waarde komen en het tonen op het display, met de waardes die daar uitkomen kunnen we later het hoofdprogramma maken voor de modelbouw regelaar. We gaan drie waardes bepalen, namelijk de midden, hoogste en laagste waarde. Dat doen we door de knuppel op de zender in de hoge, midden en lage positie te zetten.
We gaan even naar het stukje software kijken om de ontvanger uit te lezen.
Device 16F887 ; Processor type
Xtal 10 ; Crystal 10 MHz
Asm ; Config settings
CONFIG_REQ
__CONFIG _CONFIG1, HS_OSC & WDT_OFF & DEBUG_OFF & FCMEN_OFF & LVP_OFF & IESO_OFF & BOR_OFF & CPD_OFF & CP_OFF & MCLRE_OFF & PWRTE_ON
__CONFIG _CONFIG2, WRT_OFF & BOR40V
EndAsm
All_Digital true ; Alle poorten digitaal
Declare LCD_RSPin PORTD.2 ; Reset display poort D.2
Declare LCD_ENPin PORTD.3 ; Enable display poort D.3
Declare LCD_DTPin PORTD.4 ; Data display poort D.4 t/m D.7
Declare LCD_Lines 2 ; Twee lijns display
Dim VAR1 As Word ; Variabele waarde ontvanger
Cls ; Wis display
DelayMS 2000 ; Pauze 2 sec
Clear ; Wis geheugen
;543210 ; Hulpregel poort A
PORTA = %000000 ; Maak poort A laag
TRISA = %000000 ; Poort_A I/O
;543210 ; Hulpregel poort B
PORTB = %000000 ; Maak poort B laag
TRISB = %000000 ; Poort_B I/O
;76543210 ; Hulpregel poort C
PORTC = %00000000 ; Maak poort C laag
TRISC = %00000000 ; Poort_C I/O
;76543210 ; Hulpregel poort D
PORTD = %00000000 ; Maak poort D laag
TRISD = %00000000 ; Poort_D I/O
;210 ; Hulpregel poort E
PORTE = %000 ; Maak poort E laag
TRISE = %000 ; Poort_E I/O
;76543210 ; Hulpregel analoog
ANSEL = %00000000 ; ANSEL register analoog poort_A
;76543210 ; Hulpregel analoog
ADCON0 = %00000001 ; ADCON0 register analoog 8 bit
;76543210 ; Hupregel analoog
;ADCON1 = %10000000 ; ADCON1 register analoog 10 bit
;76543210 ; Hulpregel analoog poort_B
;ANSELH = %00000000 ; ANSEL register analoog poort_B
;--------------------------------------
; WAARDE MODELBOUW ONTVANGER UITLEZEN.
;--------------------------------------
RUN:
VAR1 = PulsIn PORTA.5,1
Print At 1,1,Dec3,WAARDE
GoTo RUN
End
Zoals je kunt zien stelt dat niets voor, we hebben aan een paar regels genoeg om de ontvanger uit te lezen. We hebben de variabele VAR1
als woord ingesteld, omdat de waarde groter wordt dan 255. Maar de waarde wordt niet groter dan drie digits (Dec3
). Voor het uitlezen van de ontvanger gebruiken we het PULSIN
commando.
De zender en ontvanger zijn van Graupner en werkt in de 40 MHz band. We gaan nu kijken welke waardes we te zien krijgen. Met de knuppel in de middenstand krijgen we een waarde van 353 te zien. Met de knuppel in de bovenste stand zien we een waarde van 457 en met de knuppel in de onderste stand zien we een waarde van 243. Deze waardes moeten nu omgezet worden in een waarde tussen de 0 en 255, die waarde gaan we later gebruiken voor het aansturen van de regelaar.
Om aan de waarde van 0 tot 255 te komen, moeten we een formule gaan maken. We gaan uit van de laagst gemeten waarde, die is nu 243 maar die moet 0 worden als de knuppel in de onderste stand staat. Als we nu zeggen VAR1 = 243 - 243 = 0
, dan wordt de waarde 0 met de knuppel in de onderste stand, dat is dus goed. Nu gaan we naar de hoogste waarde kijken, als we nu zeggen VAR1 = 457 - 243 = 214
dan komen we 41 te kort om aan de waarde 255 te komen. Als we nu 255 delen door 214, krijgen we 255 : 214 = 1.19158
. Die waarde ronden we af naar 1.20. Dan zou voor de knuppel in de hoogste stand de formule zo worden (VAR - 243) X 1.20
. De waarde wordt dan (457 - 243) X 1.20 = 256.8
, dat is dus net boven de 255 en dat is prima. Nu gaan we naar de middelste waarde kijken, die moet eigenlijk op ± 127 uit komen. 353 - 243 = 110
, we komen hier dus 17 te kort. Als we 127 delen door 110, dan krijgen we 127 : 110 = 1.1545
. Daar kunnen we ook 1.20 van maken, dan komen we uit op VAR1 = 353 - 243 = 110 X 1.20 = 132
. Dit kunnen we wel met de trim functie van de zender weg werken.
De formule gaat dus dit worden: (VAR1 - 243) X 1.20
. Voor de laagste stand maakt het niet uit dat er met 1.20 vermenigvuldigd wordt, want 0 X 1.20 blijft 0. Nu kunnen we dus een waarde maken tussen de 0 en 255.