Hallo
Ik heb nog eens een vraagje aangezien ik bezig ben aan mijn eerste robotje.
Ik heb al LDR's om licht te zoeken. Mechanisch heb ik ook geen problemen meer, motortjes + onderstuk is in orde.
Motordrivers werken.
Nu ben ik aan het nadenken over een obstakelontwijking. Ik heb hier nog enkele mooie (IR)fototransistoren en IR leds. Nu vroeg ik me af of het mogelijk is om een fototransistor rechtstreeks aan een 16F628A te hangen. Ik vond het niet zo goed.(ik heb gezocht hoor) En als dat niet zo is, wat kan ik dan best voor mijn PIC ingang zetten?
Dit? http://www.circuitsonline.net/circuits/view/16
Alvast bedankt.
Dit alles zou moeten kunnen werken op de 5V van de PIC.
Ik heb nog wat rondgezocht en is het dan niet beter dat ik dat ledje moduleer? Anders gaat het te veel last hebben van omgevingslicht.
Alvast bedankt.
Ik heb net ontdekt dat er in mijn schuif nog een TSOP1736 ligt. Deze werkt op 36KHz, dan hoef ik enkel het ledje te moduleren. Kan dit wel rechtstreeks aan mijn PIC?
Als je een deftig bereik wilt, stuur je daar pulsjes van een halve Ampere doorheen. Dat lukt niet met de poortpin van een pic 
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 22 februari 2009 11:09:17 schreef bvbart:
Ik heb net ontdekt dat er in mijn schuif nog een TSOP1736 ligt. Kan dit wel rechtstreeks aan mijn PIC?
Die ontvanger kan prima direct aan een PIC (mits op 5V, en met de R en C aan de 1736 voeding, zoals in de datasheet aangegeven).
Voor korte afstanden kan je de IR-zend-LED via een weerstand van bv 470 Ohm direct aan je PIC hangen. Voor grotere afstanden een schakeltor gebruiken, maar let dan wel op dat bij grotere stromen continu-aan je zend-led kan mollen.
Dat komt in orde denk ik. Met die sensor.
Weet toevallig iemand of je de layout van een motordriver M54644BL ergens kan vinden in Eagle? Ik vind het natuurlijk weer niet.
Ik zal het maar hier verder vragen he.
Het is me allemaal redelijk gelukt met die PIC en het motortje enzo. Ik ben mijn robot nu aan het laten rondrijden op de afstandsbediening van de TV. Dat gaat heel goed als je de motoren aan of uit wilt doorsturen.
Maar nu wil ik die motoren pwm'en. Ik heb al een programmaatje op basis van de site picbsic.nl. Maar ik vind echt niet hoe ik het oplos.
DEVICE 16F648A
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE
symbol lv porta.0
symbol la porta.1
symbol ra porta.2
symbol rv portb.5
symbol lr porta.6
symbol lg porta.7
symbol ldr1 portb.1
symbol ldr2 portb.0
symbol irsensor portb.4
symbol irled porta.3
dim tel as bit
dim teller as byte
;Normale aliases (constanten)
SYMBOL BlinkAantal = 10 ;Max 127: Aantal LED blinken ten teken: systeem code ingeprogrammeerd
SYMBOL BlinkTijd = 500 ;mSec: Snelheid van het blinken van de LED bij PIC in programmeermode (systeem wijziging in programmeren)
SYMBOL BlinkTijdSnel= 150 ;mSec: Snelheid van het blinken van de LED bij systeem code programmeren (systeem is gewijzigd)
SYMBOL DefaultSys = 0 ;0 = TV: Bij allereerste keer na programmeren van PIC, is systeem TV
SYMBOL Glitch = 52 ;Max 255: Onderdrukken storingstijd (glitches)
SYMBOL Ok = 50 ;Max 255: Controletijd of RC5 code goed wordt ontvangen
SYMBOL Sample = 300 ;Als alle samples UIT zijn dan is de toets van de afstandsbediening losgelaten
;Logische aliases (constanten)
SYMBOL AAN = 0 ;Omgekeerd ON
SYMBOL FALSE = 0
SYMBOL HOOG = 1
SYMBOL LAAG = 0
SYMBOL OFF = 0
SYMBOL ON = 1
SYMBOL TRUE = 1
SYMBOL UIT = 1 ;Omgekeerd OFF
;WORD
DIM WD1 AS WORD ;Word Dummy
;BYTE
DIM Command AS BYTE
DIM Systeem AS BYTE
DIM BD1 AS BYTE ;Byte Dummy
;BIT
DIM FoutOntvangst AS BIT
DIM ProgramMode AS BIT ;Wordt TRUE als bij opstarten meteen al een RC5 binnenkomt
DIM ToggBit AS BIT ;ToggBit wordt hier verder niet gebruikt, is een deel van de RC5 code
DIM Waarde AS BIT
DIM ID1 AS BIT ;bIt Dummy
; 76543210
PORTA = %00000000
TRISA = %00000000
trisb = %11011111
portb = %00000000
EDATA DefaultSys
CLEAR
DELAYMS 100 ;Stabilisering signalen
GOSUB AllesUit ;Alle uitgangen laag
Lg = ON ;Kenmerk dat de processor loopt, LED even aan/uit
DELAYMS 400 ;IR-ontvanger stabilisering, tevens LED aan/uit tijd
FOR BD1 = 1 TO 255 ;Meteen checken of er wat wordt ontvangen (= programmeermode) kan net in een dood punt vallen, daarom vaker meten
IF irsensor = AAN THEN ProgramMode = TRUE
DELAYUS 500
NEXT
Lg = OFF
IF ProgramMode = TRUE THEN ;Als in programmeermode, dan...
FOR BD1 = 1 TO 9 ;LED even laten knipperen en daarna laten branden ten teken dat de programmeermode actief is
Lg = ~Lg
DELAYMS BlinkTijd
NEXT
GOSUB WachtOpToetsLosLaten
ENDIF
GOTO Start
;Subroutines
AllesUit:
lv = off ;Alle uitgangen uitzetten als geen toets is ingedrukt
la = off
rv = off
ra = off
IF ProgramMode = FALSE THEN lg = OFF
RETURN
BitOphalen:
Waarde = irsensor ;Maak Waarde 0 of 1 afhankelijk van ontvangen IR code
BD1 = 0
WHILE irsensor = Waarde AND BD1 < Ok;Niveau moet binnen een bepaalde tijd veranderen
INC BD1
WEND
IF Ok = BD1 THEN FoutOntvangst = TRUE ;Error in ontvangst, niet binnen de tijd een niveau-verandering (Geen RC5 of slechte ontvangst)
DELAYUS 1000
RETURN
WachtOpToetsLosLaten:
WD1 = Sample
WHILE WD1 > 0 ;Wacht zolang de toets van de afstandsbediening is ingedrukt, als 300 samples niets is ontvangen, dan is toets losgelaten
DEC WD1
IF irsensor = AAN THEN WD1 = Sample ;Opnieuw beginnen met samples tellen
DELAYUS 500 ;300 x 500us = 150ms
WEND
RETURN
;Hoofdprogramma
Start:
GOSUB AllesUit ;Alle uitgangen laag
WHILE irsensor = UIT : WEND ;Wacht op ontvangst
BD1 = 0
WHILE irsensor = AAN AND BD1 < Glitch
INC BD1
WEND
IF BD1 < Glitch THEN Start ;Error in ontvangst (Geen RC5 code of glitch)
Lg = ON ;IR-signaal ontvangen
DELAYUS 600 ;900 - 300: Header van RC5 vermijden
GOSUB BitOphalen : Command.6 = ~Waarde ;Extended bit (geinverteerd)
GOSUB BitOphalen : ToggBit = Waarde
GOSUB BitOphalen : Systeem.4 = Waarde
GOSUB BitOphalen : Systeem.3 = Waarde
GOSUB BitOphalen : Systeem.2 = Waarde
GOSUB BitOphalen : Systeem.1 = Waarde
GOSUB BitOphalen : Systeem.0 = Waarde
GOSUB BitOphalen : Command.5 = Waarde
GOSUB BitOphalen : Command.4 = Waarde
GOSUB BitOphalen : Command.3 = Waarde
GOSUB BitOphalen : Command.2 = Waarde
GOSUB BitOphalen : Command.1 = Waarde
GOSUB BitOphalen : Command.0 = Waarde
IF FoutOntvangst = TRUE THEN ;Error in ontvangst, niet binnen de tijd een niveau-verandering (Geen RC5 of slechte ontvangst)
FoutOntvangst = FALSE ;Reset
GOTO Start ;Lus niet verder uitvoeren
ENDIF
IF ProgramMode = TRUE THEN Programmeren ;Ander systeem in programmeren
IF Systeem = EREAD 0 THEN ;Alleen uitvoeren als het ontvangen systeem gelijk is aan het voorgeprogrammeerde systeem
SELECT CASE Command
case 1:
rv = on ;De bijbehorende uitgang aanzetten
CASE 2:
lv = on
rv = on
case 3:
lv = on
CASE 4:
la = ON
rv = on
case 5:
repeat
for teller = 0 to 255
if teller > 180 then
low lv
else
high lv
endif
if teller > 180 then
low rv
else
high rv
endif
delayms 1
next
inc tel
until tel = 100
CASE 6:
lv = ON
ra = on
case 7:
ra = on
CASE 8:
la = ON
ra = on
case 9:
la = on
CASE ELSE
GOTO Start ;Anders blijft LED continue branden als Systeem = EREAD 0, maar niet toets 0 - 9, hoort niet
endselect
GOSUB WachtOpToetsLosLaten
ENDIF
GOTO Start
Programmeren: ;Nieuw systeem inprogrammeren
EWRITE 0, [Systeem] ;Sla het systeem op
ProgramMode = FALSE
FOR BD1 = 1 TO BlinkAantal * 2
Lr = ~Lr ;Laat LED een paar maal knipperen
DELAYMS BlinkTijdSnel
NEXT
GOSUB WachtOpToetsLosLaten
GOTO Start
end
Kunnen jullie me misschien ff helpen?
EDIT: In dit programma pwm't hij mijn 2 motoren voor 100ms.
Op 1 maart 2009 15:15:53 schreef bvbart:
Ik heb al een programmaatje op basis van de site picbsic.nl. Maar ik vind echt niet hoe ik het oplos.
Geeft dan op z'n minst aan wat je veranderd hebt. Of moet men dat ook nog zelf doen... En wat werkt er niet?
Hallo
Ik zal proberen te verduidelijken.
Alles werkt als ik op afstandsbediening rijdt. Het enige wat ik aan de code verandert heb is de namen van bepaalde dingen en de motoren die aan en uit moesten worden geschakeld.
Alles gaat perfect, ik vind alleen niet hoe ik mijn motoren pwm met de afstandsbediening.
case 5:
repeat
for teller = 0 to 255
if teller > 180 then
low lv
else
high lv
endif
if teller > 180 then
low rv
else
high rv
endif
delayms 1
next
inc tel
until tel = 100
Dit is het stuk waar ik pwm geprobeerd heb. Het werkt voor 100mS. Het is de bedoeling dat het pwm't zolang de toets ingedrukt is.
Ik heb de code van [url]http://www.picbasic.nl/[url/]
Bij projecten : Draadloze 10 kanalen ontvanger.
Ik hoop dat ik nu duidelijker ben geweest.