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

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 ;)