PIC Opg 3 Løsning: Forskelle mellem versioner

Fra HTX Arduino
Spring til navigation Spring til søgning
_htx>Bar
Oprettede siden med 'Løsning på PIC Opgave 3 - Udvidet blink Opgaven bygger videre på PIC Opgave 1 - Blink. Den går mest på at håndtere flere udgange og reagere på et input. Gen...'
 
 
(En mellemliggende version af den samme bruger vises ikke)
Linje 52: Linje 52:
</pre>
</pre>
Linje 35 tester på kontaktens niveau. Hvis det er højt (trykket på kontakten), så bliver linje 36 udført, der laver pause i 300 millisekunder. Hvis kontaktens niveau er lavt (der er ikke trykket på kontakten), så bliver linje 38 udført, der laver pause i 300 millisekunder. Resultatet er at den blinker hurtigere når der trykkes på kontakten.
Linje 35 tester på kontaktens niveau. Hvis det er højt (trykket på kontakten), så bliver linje 36 udført, der laver pause i 300 millisekunder. Hvis kontaktens niveau er lavt (der er ikke trykket på kontakten), så bliver linje 38 udført, der laver pause i 300 millisekunder. Resultatet er at den blinker hurtigere når der trykkes på kontakten.
{{PIC}}
{{Opgaver}}


[[Kategori:PIC_Opgave_Løsninger]]
[[Kategori:PIC_Opgave_Løsninger]]

Nuværende version fra 15. nov. 2022, 11:31

Løsning på PIC Opgave 3 - Udvidet blink

Opgaven bygger videre på PIC Opgave 1 - Blink. Den går mest på at håndtere flere udgange og reagere på et input.

Generelt er begge løsninger lavet med den sædvanlig opstartskode til en PIC16F684, og selve funktionen realiseret i et forever loop.

Opstartskoden kan ses generelt gennemgået i

Jal-filer med løsningsforslag

Der ligger en ZIP-fil med de løsninger der er dokumenteret her.

Den grundlæggende løsning

Der sættes nogle få grundlæggende ting op

porta_direction = all_output

alias  LED1 is pin_a0
alias  LED2 is pin_a1

Da der i første omgang kun er outout, så sættes hele port a på til output, og de to lysdioder navngives.

Hele koden inde i forever-loopet skal blot sikre at de to udgange er forskellige (modtakt), og at de blinker med en fast takt. Der ser ud som følgende:

33   LED1 = LED2
34   LED2 = ! LED2
35   delay_100ms(6)

Linje 33 sætter LED1 til de niveau LED2 har og umiddelbart efter sættes LED2 til det modsatte af LED2's niveau. På denne måde sikres at de har forskelligt niveau, og at de uanset udgangsniveauet er forskellige.

Linje 35 laver et delay på 600 millisekunder, så den endelige blink-tid (on og off samlet) bliver på 1,2 sekund.

Koden ligger som .jal i denne ZIP-fil.

Den udvidede løsning

Udvidelsen går ud på at man skal kunne rette blikhastigheden til det dobbelte.

Først sættes en indgang op og den navngives kontakt ved følgende:

alias   kontakt is pin_A3
pin_A3_direction =  input

Derefter udvides den linje hvor der ventes til følgende:

35   if kontakt then
36      delay_100ms(3)
37   else
38      delay_100ms(6)
39   end if

Linje 35 tester på kontaktens niveau. Hvis det er højt (trykket på kontakten), så bliver linje 36 udført, der laver pause i 300 millisekunder. Hvis kontaktens niveau er lavt (der er ikke trykket på kontakten), så bliver linje 38 udført, der laver pause i 300 millisekunder. Resultatet er at den blinker hurtigere når der trykkes på kontakten.

PIC
PIC-Typer PIC16F84 - PIC12F675 - PIC16F628 - PIC16F684 - PIC16F690 - PIC16F877 - PIC18F2550
Programmeringsbegreber Maskinkode - Mikrocontroller
Programmeringsmiljø PIC-brænder - UsbPicProg - Analog indgang - ICSP


Digitale Opgaver
Kombinatorisk Logik Opgave 1a - Opgave 1b - Opgave 2 - Opgave 3 - Opgave 4 - Opgave 5 - Opgave 6 - Opgave 7 - Opgave 8 - Opgave 9 - Opgave 10
Sekvensiel Logik Opgave 11 - Opgave 12 - Opgave 13 - Opgave 14
Analoge Opgaver
Modstande og Ohms lov Modstands Opgave 1 - Modstands Opgave 2 - Modstands Opgave 3 - Modstands Opgave 4 - Modstands Opgave 5 - Modstands Opgave 6 - Modstands Opgave 7 - Modstands Opgave 8 - Modstands Opgave 9 - Modstands Opgave 10
Kondensator og Spole Kondensator opgaver 1 - Kondensator DC opgave 1 - Kondensator AC opgave 1 - Spolen 1 - Seriekobling og parallelkobling - Spolen 2 - Beregning af spoleværdier (selvinduktionen) - Spolen 3 - Tidskonstant for RL-led - Spolen 4 - Beregning af induktiv-reaktansen
Operationsforstærker Opamp Opgave 1 - Opamp Opgave 2 - Opamp Opgave 3
Diverse Opgaver Opgaver Diagram - Opgaver Transformator - Transistor opgave - Zenerdiode Opgave 1
Programmerings Opgaver
Arduino Arduino Blink - Arduino Opgave 01 - Blink - Arduino Button - Analog Out - Arduino StateChangeDetection - Arduino termometer - Arduino termostat - Arduino udgangsforstærkning
PIC PIC Opgave 1 - Blink - PIC Opgave 2 - Gates - PIC Opgave 3 - Udvidet blink - PIC Opgave 4 - Kombinatorik - PIC Opgave 5 - Flip-flops - PIC Opgave 6 - Løbelys - PIC Opgave 6a - kontakt - PIC Opgave 7 - Udvidet løbelys - PIC Opgave 8 - Sekventielle kredsløb - PIC Opgave 9 - Multivibratorer - PIC Opgave 10 - Samtidighed - PIC Opgave 11 - Tastatur - PIC Opgave 12 - Display - PIC Opgave 13 - A-D converter - PIC Opgave 14 - Interrupt - PIC Opgave 15 - Seriel komm - PIC Opgave 16 - Lyskryds - PIC Opgave 17 - Tyverialarm
PIC Opgave Løsninger PIC Opg 1 Løsning - PIC Opg 2 Løsning - PIC Opg 3 Løsning - PIC Opg 4 Løsning - PIC Opg 5 Løsning