Hallo,
Ik ben bezig met mijn project om met een rf afstandsbediening (433mhz) gordijnen aan te sturen. Het zenden en ontvangen van signalen werkt prima, mede dankzij CO.
Laatst was ik bezig om twee drukknoppen op de zender aan te sluiten, zodat deze een bepaalde, vooraf ingestelde waarde, gaat verzenden. Ik wilde hier poort b4 en b5 voor gebruiken. Het viel me op dat ik poort b5 niet hoog kon maken, zodat de drukknop 'm naar 0 kan trekken. Wat ik me kan herinneren, gold dit ook voor b6 en b7. Poort b0 doet het echter prima. Ik heb ook een andere 16F628a geprobeerd en daar werd poort b5 ook niet hoog.
Misschien maak ik een domme fout, maar mijn vraag is:
Kan het zo zijn dat doordat ik HRSout gebruik, sommige poorten niet meer reageren zoals ik zou verwachten?
Hieronder staat de code van de zender. Hier gebruik ik poort b0, omdat de anderen niet werkte.
'ZENDER
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT,WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF ;X
Symbol baudrate = 2400 ;baudrate
Symbol led PORTA.2 ;Poort A.2 heeft nu de naam LED
Symbol Zender_aan PORTA.1 ;Voeding voor de zender
Symbol omhoog PORTB.4
Symbol omlaag PORTB.0
Symbol Xzenden = 3 ;Aantal maal zenden herhalen
Symbol Gordijn = 1 ;ALLEEN GORDIJN1
Symbol hoog = 0
Symbol laag = 100
Symbol contactdender = 5
ALL_DIGITAL TRUE ;alle poorten digitaal
PORTB_PULLUPS On ;On-chip pull-up weerstanden actief
HSERIAL_BAUD = baudrate ;baudrate
HSERIAL_TXSTA = %00100000 ;transmit enable
;76543210
PORTA = %00000000 ;PIC opstarten met alle PORTA poorten laag
PORTB = %11111001 ;B4 en B5 hoog
TRISA = %11111001 ;Maak PORTA.2 uitgang LED , portA.1 zender
TRISB = %11111001 ;Input voor knoppen op b4 en b5
Dim hoogte As Byte ;Deze Teller kan tot max.255 tellen (BYTE = 255)
Dim teller3 As Byte
Dim db1 As Byte
Cls
DelayMS 200
GoTo Main
Zenden: ;Subroutine zenden
teller3 = Gordijn + hoogte ;CRC
Zender_aan=1 ;zender wordt aangezet
DelayMS 50 ;zender opstarten
For db1 = 1 To Xzenden ;X maal uitzenden
HRSOut "111","ok",Gordijn , hoogte, teller3
Next db1
DelayMS 50 ;zender afsluiten
Zender_aan=0 ;zender wordt uitgezet
led=led^1 ;led geeft aan dat programma draait
Return
Main:
While 1= 1
If omhoog = 0 Then
DelayMS contactdender
hoogte = hoog
GoSub Zenden
EndIf
If omlaag = 0 Then
DelayMS contactdender
hoogte = laag
GoSub Zenden
EndIf
Wend
Alvast bedankt,
Jeroen
hadv
Just find out what you like and let it kill you
Hoezo wil je RB4 en 5 hoog maken?
Als je een '0' op die poorten wil krijgen met een knop dan moet je er voor zorgen dat de schakelaar in rust de pin naar de +5 trekt (weerstandje van 10k), de andere kant van de schakelaar hang je aan de 0V. Door de schakelaar in te drukken trek je de pin naar 0.
HRSout heeft daar in principe nix mee te maken.
+5
|
R:10K
|
+--> RBx
|
+--\
.....\ Schakelaar
+-- \
|
0V
Mijn bedoeling is om twee drukknoppen te hebben (gordijn omhoog/omlaag). Eentje op b4 en de andere op b5. Om de schakeling mogelijk te maken heb ik (onder andere) b4 en b5 hoog ingesteld. Wanneer op de knoppen wordt gedrukt, worden b4 of b5 naar 0 getrokken.
Wat ik heel vreemd vind is dat b5 (en b6 en b7) niet hoog worden, terwijl ik dat wel heb ingesteld (PORTB = %11111001). Pin b5 blijft altijd laag, ook al hangt er helemaal niets aan.
Je stelt PortB in als een input, dan maakt het niet uit of je het register hoog of laag maakt, dat heeft alleen invloed als PortB als output is ingesteld. Dat kan je niet instellen bij een input, en dan moet je een weerstand gebruiken.
Bedankt. Ik dacht dat je een input ook hoog kon maken en naar nul kon trekken. Ik zal mijn schakeling gaan aanpassen en kijken of het dan beter werkt 