| Naam |
Bericht |
2N3055
|
Die 12V staat bij ABSOLUTE MAXIMUM RATINGS, dat is dus niet de normale bedrijfsspanning.
Datasheet nog een keer lezen.
www.evertdekker.com
|
Lithium
|
Oke, fout gelezen dan.
Scheelt weer wat spanning maar goed, eerst maar eens zien hoe het werkt.
Ik vraag met het volgende nog af.
zoals bij rs heb je natuurlijk een start en stop bit, dan kan je nog kiezen tussen even en oneven etc.
verstuurt die max485 de gegevens pas als hij de stop bit gekregen heeft? of stuurt hij alles door wat hij binnen krijgt?
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
bprosman
|
Die MAX485 is niet meer dan een buffer/versterker die je RS232 signaal omzet in een RS485 signaal. Start, Stopbits parity zul je in de UART van je processor in moeten stellen. CPU en MAX beide voeden met 5 Volt. Ik zou nog steeds die 78(L)05 gebruiken. Die is er ook nog in SMD als je echt plaats te kort komt.
Groeten, Bram [Bericht gewijzigd door bprosman op 28 juli 2008 12:04:34]
De jongere generatie loopt veel te vaak zijn PIC achterna.
|
Lithium
|
Ja denk ook wel dat een 7805 handig kan zijn in de kleine uitvoering zoals je al zei.
Ik moet even kijken of ik kan vinden hoe uart in elkaar zit, ik heb het wel ooit gebruikt vorig jaar maar dat was rechtstreeks naar een andere pic.
Ik heb aurt gebruikt in proton ide en wat je daar in kon stellen was de snelheid, wachtwoord, de variabel en nog iets maar wat en hoe weet ik niet meer.
Is dat mogelijk om dit zo in te stellen in proton dat het ook te gebruiken is met de max?
EDIT:
Opgezocht in de datasheet van de pic 16f628a
pagina 80.
Daar zie je een tabel met de bits die hij verstuurt.
De start bit is laag en de stopbit is hoog
En hij heeft 7 tot 8 bits.
Dat zou dan toch gelijk moeten zijn met die max485? [Bericht gewijzigd door Lithium op 28 juli 2008 12:13:43]
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
bprosman
|
quote: wachtwoord, de variabel en nog iets maar wat en hoe weet ik niet meer.
Als ik deze zin zo lees denk ik dat je je eerst beter in de werking van de UART kunt verdiepen. Eerst leren lopen, dan rennen. Nogmaals de MAX BUFFERT alleen, als je UART "gewoon" goed werkt , werkt ie ook bijna (de max485 heeft ook nog een "richting" signaal nodig) met de MAX.
Groeten, Bram
De jongere generatie loopt veel te vaak zijn PIC achterna.
|
Lithium
|
Ik wacht de onderdelen even af en dan laat ik wel weten of het wel of niet lukt, en wat er aangepast is.
Op wiki staat genoeg over uart, dat lees ik gewoon
http://en.wikipedia.org/wiki/UART [Bericht gewijzigd door Lithium op 28 juli 2008 12:17:27]
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
bprosman
|
quote: dat lees ik gewoon
"The proof of the pudding is in the eating", ik zou gewoon eens een picje programmeren en je PC er via RS232 en hyperterminal aanhangen. Dan kun je precies zien wat er gebeurt.
Groeten, Bram
De jongere generatie loopt veel te vaak zijn PIC achterna.
|
EddyDean
|
En als je nu eens gewoon iets als I2C of SPI zou gebruiken? Microcontrollers vinden dat leuke protocollen, en het is makkelijk om foutcorrectie in te bouwen, en je hebt ook meteen wat gemakkelijks om je slaves bij naam te noemen. Als kabel kun je iets gebruiken als een CAT6 kabel.
|
2N3055
|
quote: Op 29 juli 2008 09:41:19 schreef EddyDean:
En als je nu eens gewoon iets als I2C of SPI zou gebruiken? Microcontrollers vinden dat leuke protocollen, en het is makkelijk om foutcorrectie in te bouwen, en je hebt ook meteen wat gemakkelijks om je slaves bij naam te noemen. Als kabel kun je iets gebruiken als een CAT6 kabel.
Beide zijn niet zo geschikt voor communicatie over een afstand van meer dan 1M, en rs458 is veel makkelijker uit te voeren.
www.evertdekker.com
|
Frits Kieftenbelt
Honourable member
|
Een eenvoudige, doch niet officiële verbinding staat op www.picbasic.nl/huis-automatisering.htm
Betreft een artikel over domotica met PIC.
Ohm sweet Ohm l www.picbasic.nl
|
Lithium
|
Ik dacht dat ik zo iets al ooit eens bij jou gelezen te hebben.
Dat was het ja.
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
Lithium
|
Frits,
Ik heb uw website gelezen zoals u weet.
Wat ik me dan toch af vraag.
Stel ik heb een pic met die tijd klok erop om de tijd op te halen.
En ik wil bij een andere pic weten hoelaat het is.
Hoe gaat dat in zijn werk? je vraagt de tijd met 1 van de 154 mogelijkheden.
maar hoe stuur je de tijd dan terug? kan je tekst mee sturen of iets?
ik zocht eigenlijk naar zo'n stukje code.
Hoeft niet speciaal gemaakt te worden maar neem aan dat u iets heeft liggen?
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
Frits Kieftenbelt
Honourable member
|
Het klok-IC PCF8583 alsook de DCF77 PIC zitten rechtstreeks verbonden naast de PIC18F452 master PIC.
Het is dus nu niet mogelijk om elke PIC op de bus de tijd op te laten vragen met dit 16-bit pakketje.
Daarvoor moet je dus zelf een protocol verzinnen.
Bij mij hoeft ook alleen de master de tijd te weten omdat in deze PIC de ingestelde tijden staan met bijbehorende opdrachten.
Bijvoorbeeld:
code:
SELECT Tijd
CASE 0400 ;04:00 uur
Opdracht = ResetCancels ;'s Nachts 4:00 alle cancels resetten
GOTO OpdrachtUitvoeren
CASE 0700
IF AnnuleerRamen = FALSE THEN ;Ramen niet geannulleerd? Dan...
IF TempBuiten > 1500 AND NegTemp = FALSE THEN ;Buiten warmer dan 15,00 graden Celsius? Dan...
Opdracht = RaamOpenen ;Open kamerraam
GOSUB ZendBus ;Verzend opdracht via bus
Opdracht = RaamKOpenen ;Open keukenraam
GOTO OpdrachtUitvoeren ;Keukenraam zit aan master zelf
ENDIF
ENDIF
CASE 0800
Opdracht = LuxaflexOpenen ;Luxaflex openen
GOSUB ZendBus ;Verzenden over de bus
IF Dag = Donderdag THEN ;Alleen donderdags (lawaai vuilnisophaler)
IF UitBedTijd > Tijd THEN ;Ligt nog iemand in bed?
Opdracht = RaamSSluiten ;Sluit slaapkamerraam
GOTO OpdrachtUitvoeren ;Slaapkamerraam zit aan master zelf
ENDIF
ENDIF
CASE 2230
Celsius = TempEconomic ;Verwarming lager
GOSUB Nefit ;Verzenden met 300Baud naar thermostaat
Opdracht = RaamSluiten ;Kamerraam sluiten
GOSUB ZendBus ;Zend opdracht over de bus
ENDSELECT
Nu is dit maar een klein stukje uit de lijst.
Elke PIC wordt dus door tijd aangestuurd, maar weet de werkelijke tijd niet, dat weet alleen de master.
Het kan wel, maar dan moet je met je PIC's gezamelijk iets afspreken, oftewel een protocol verzinnen.
Het staat ook bij mij nog in de kinderschoenen.
Het is nu nog statisch, kan tijden nu alleen wijzigen in Proton en de master PIC opnieuw programmeren (maar een wijziging is zelden nodig, ben ik al achter).
Maar ik ben dan ook nog niet klaar met het project, ik werk er nog steeds aan.
Met de Pronto Neo afstandsbediening of een encoder o.i.d. moet ik straks door een menu kunnen wandelen en tijden met opdrachten in kunnen stellen.
De master stuurt ook het display aan waarop continu de tijd wordt weergegeven, het klok-IC wordt elke seconde uitgelezen. [Bericht gewijzigd door Frits Kieftenbelt op 12 augustus 2008 22:17:09]
Ohm sweet Ohm l www.picbasic.nl
|
marcob
|
@Frits, mischien voor jouw een interesante link als toevoeging voor je systeem. Een PIC via de seriele aansluiting koppelen met je PC. Kan de PIC commando's en macro's uitvoeren op de PC.
http://www.pcremotecontrol.com/software/pcrcsoft.htm
Een WOK is ook maar een vergiet zonder gaatjes
|
Frits Kieftenbelt
Honourable member
|
Dat van die PC heb ik in overweging gehad.
Ik vind het nadeel dat je dan eerst je PC moet opstarten (heb hem niet de hele dag aan staan).
Maar goed, het is er natuurlijk bij in te bouwen.
Eerst maar eens een menu met encoder toevoegen aan de master PIC.
Ohm sweet Ohm l www.picbasic.nl
|
Lithium
|
in plaats van die master pic kan je ook die afstandsbediening gebruiken, hier is het snel in aan te passen.
ik heb op school een i pronto geprogrammeerd werkt simpel en snel.
wij kunnen er een groot computer lokaal mee besturen.
rolluiken, tl lampen, spotjes, tv scherm, beamer, versterker, radio etc.
je kan bijna elke tl afzonderlijk dimmen en een licht sterkte instellen.
ook wat standaard dingen zoals bioscoop.
dan gaan bepaalde lampen dimmen, rolluiken omlaag beamer naar beneden aan etc.
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
Frits Kieftenbelt
Honourable member
|
Maar het gaat hier om tijden (timers) instellen.
Hoe wil je dat met die afstandsbediening doen?
Als ik wil dat de luxaflex niet om 9:00, maar om 9:30 open gaat, dan moet ik (nu nog) de PIC herprogrammeren.
Ik zie niet in hoe je deze tijd met die afstandsbediening kunt wijzigen.
Ohm sweet Ohm l www.picbasic.nl
|
Lithium
|
je kan die dingen programmeren naar je eigen stijl.
je kan ook instellingen veranderen.
in plaats van de master pic heb je die afstands bediening.
hij moet dan wel altijd aan staan masr die kan bijv om 9:30 een ir of rf codevverzenden naar een pic.
zoals een repeater
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
Lithium
|
Mijn versie van Proton IDE is binnen.
Ik heb de Lite versie al een aantal jaren en nu heb ik hem maar gewoon gekocht.
Er zit ook een VSM programma in (Proteus ISIS Professional)
Helaas is dit maar een demo, dit is ook een erg mooi programma erg balen dat het een demo is.
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
bprosman
|
Je zou ook een master processor maken die een script inleest van een SD kaartje of zo.
Groeten, Bram
De jongere generatie loopt veel te vaak zijn PIC achterna.
|
Lithium
|
Frits, of misschien iemand anders.
Ik ben nu deze middag bezig met het verzenden en ontvangen van data.
Het volgende programma lukt bij mij:
code:
Ontvanger
code:
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : Lithium *
'* Notice : Copyright (c) 2008 Lithium'* : All Rights Reserved *
'* Date : 3-3-2008 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
CLEAR ;Wis alle RAM geheugen
Dim tekst As dWord
;Logische constanten
SYMBOL AAN = 0 ;Geinverteerd ON
SYMBOL HOOG = 1 ;Signaal met hoog niveau
SYMBOL LAAG = 0 ;Signaal met laag niveau
SYMBOL TRUE = 1 ;Waar
SYMBOL FALSE = 0 ;Niet waar
SYMBOL OFF = 0 ;
SYMBOL ON = 1 ;
SYMBOL UIT = 1 ;Geinverteerd OFF
Symbol baud = 4800 ;baud snelheid communicatie
symbol timeout = 20 ;Timeout tussen communicatie
SYMBOL ingang = PORTA.0 ;Ingang voor seriele communicatie
SYMBOL uitgang = PORTA.1 ;Uitgang voor seriele communicatie
symbol antidender = 25
dim DATAbyte as byte
delayms 200
Clear
cls
Main:
while 1 = 1
SERIN ingang, 3313, [WAIT("WW"), databyte]
if databyte = 255 Then
cls
Print at 1, 1, "Tekst 1"
endif
if databyte = 254 Then
cls
Print at 1, 1, "Tekst 2"
Endif
wend
Zender:
code:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
CLEAR ;Wis alle RAM geheugen
;Logische constanten
SYMBOL AAN = 0 ;Geinverteerd ON
SYMBOL HOOG = 1 ;Signaal met hoog niveau
SYMBOL LAAG = 0 ;Signaal met laag niveau
SYMBOL TRUE = 1 ;Waar
SYMBOL FALSE = 0 ;Niet waar
SYMBOL OFF = 0 ;
SYMBOL ON = 1 ;
SYMBOL UIT = 1 ;Geinverteerd OFF
Symbol baud = 4800 ;baud snelheid communicatie
symbol timeout = 20 ;Timeout tussen communicatie
SYMBOL ingang = PORTA.0 ;Ingang voor seriele communicatie
SYMBOL uitgang = PORTA.1 ;Uitgang voor seriele communicatie
symbol antidender = 25
SYMBOL Toets = PORTA.2 ;Ingang voor toets
symbol VARiabele = 255
symbol VARiabele2 = 254
GOTO HoofdProgramma ;Spring over de subroutine(s)
HoofdProgramma:
WHILE 1 = 1
SEROUT uitgang, 3313, ["WW", Variabele]
DELAYMS 1000
SEROUT uitgang, 3313, ["WW", Variabele2]
delayms 1000
Wend
goto hoofdprogramma
end
Dit is dezelfde code die ik al eens geprobeerd heb.
Nu had ik als ontvanger uw code gebruikt en wat aan gepast want ik gebruik gewoon RX en TX zonder transistor etc.
Dat lukt maar als ik dan ook de zender die code geef zodat ze alle 2 zenden en ontvangen lukt het me niet meer.
Ik heb me schoop op de RX gezet van de ontvanger en de zender zendt een aantal keer een code maar daarna niet meer.
Als de code verzonden wordt gaat het test ledje niet aan of uit.
Iemand die me uit de brand kan helpen?
deze code zit nu in alle 2 de pic's
code:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
CLEAR ;Wis alle RAM geheugen
Dim tekst As dWord
;Logische constanten
SYMBOL AAN = 0 ;Geinverteerd ON
SYMBOL HOOG = 1 ;Signaal met hoog niveau
SYMBOL LAAG = 0 ;Signaal met laag niveau
SYMBOL TRUE = 1 ;Waar
SYMBOL FALSE = 0 ;Niet waar
SYMBOL OFF = 0 ;
SYMBOL ON = 1 ;
SYMBOL UIT = 1 ;Geinverteerd OFF
Symbol baud = 2400 ;baud snelheid communicatie
symbol timeout = 20 ;Timeout tussen communicatie
SYMBOL LED = PORTA.0 ;Hierop een LED met serieweerstand aansluiten
SYMBOL ingang = PORTB.1 ;Ingang voor seriele communicatie RX
SYMBOL uitgang = PORTB.2 ;Uitgang voor seriele communicatie TX
symbol antidender = 25
dim Opdracht as byte
DIM Waarde AS BYTE
Clear ;Wis alle ram geheugen
LED = hoog
delayMS 500
LED = Laag
;SUBROUTINE
ZendBus: ;De bus die door het huis loopt
SEROUt uitgang,Baud, [Opdracht, Waarde] ;Zenden van de opdracht
RETURN
;HOOFDPROGRAMMA
HoofdLus:
CLEAR Opdracht ;Opdracht (na uitvoering) wissen
CLEAR Waarde ;Idem voor 'Waarde'
SERIn ingang, baud, 50, verder, [Opdracht, Waarde] ;ontvangen van de data
GOTO OpdrachtUitvoeren ;Voer opdracht uit
Verder: ;In het geval van een time-out van HSERIN, hier verder gaan
Opdracht = 26 ;Verzendt waarde 26 over de bus
GOSUB ZendBus
GOTO HoofdLus
OpdrachtUitvoeren:
SELECT Opdracht ;Deze SELECT lijst bepaalt wat een ontvangen opdracht gaat doen
CASE 26 ;Als de waarde '26' is ontvangen van de bus, dan...
toggle led ;... de LED aan of uitzetten (togglen)
END SELECT
GOTO HoofdLus ;Ga weer naar de oneindige hoofdlus
[Bericht gewijzigd door Lithium op 18 augustus 2008 15:51:51]
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
Lithium
|
Even update.
Dit werkt nu wel:
Dit was zonde max ic en de pic's zaten aan elkaar op RX en TX
Nu de max er tussen zetten en nog een code toevoegen en dan testen.
code:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
CLEAR ;Wis alle RAM geheugen
;Logische constanten
SYMBOL HOOG = 1 ;Signaal met hoog niveau
SYMBOL LAAG = 0 ;Signaal met laag niveau
Symbol baud = 2400 ;baud snelheid communicatie
symbol timeout = 20 ;Timeout tussen communicatie
SYMBOL LED = PORTA.0 ;Hierop een LED met serieweerstand aansluiten
SYMBOL ingang = PORTB.1 ;Ingang voor seriele communicatie RX
SYMBOL uitgang = PORTB.2 ;Uitgang voor seriele communicatie TX
SYMBOL Toets = PORTB.0 ;Toets voor verzenden van een waarde over de bus
; 76543210
PORTA = %00000000 ;Alle PORTA poorten laag
OUTPUT LED ;Stel led in als ouput
Input Toets ;Stel Toets in als input
symbol antidender = 25 ;Antidender van 25ms
dim Opdracht as byte ;Declareren van Opdracht
DIM Waarde AS BYTE ;Eventueel retour gezonden waarde (zoals gemeten LDR waarde)
Clear ;Wis alle ram geheugen
;Opstart zie je dat de pic aan gaat
LED = hoog
delayMS 500
LED = Laag
;HOOFDPROGRAMMA
HoofdLus:
CLEAR Opdracht ;Opdracht (na uitvoering) wissen
CLEAR Waarde ;Idem voor 'Waarde'
SERIn ingang, baud, 7, verder, [Opdracht, Waarde] ;ontvangen van de data
GOTO OpdrachtUitvoeren ;Voer opdracht uit
Verder: ;In het geval van een time-out van HSERIN, hier verder gaan
IF Toets = LAAG THEN ;Als toets wordt ingedrukt, dan...
Opdracht = 26 ;Verzendt waarde 26 over de bus
GOSUB ZendBus ;Ga naar Subroutine zendbus
DELAYMS 20 ;Antidender voor indrukken van de toets
WHILE Toets = Laag : WEND ;Wacht tot toets wordt losgelaten, anders blijft hij zenden
DELAYMS 20 ;Antidender voor loslaten van de toets
ENDIF
GOTO HoofdLus ; Ga naar hoofdlus
OpdrachtUitvoeren: ;Subroutine opdracht uivoeren
SELECT Opdracht ;Deze SELECT lijst bepaalt wat een ontvangen opdracht gaat doen
CASE 26 ;Als de waarde '26' is ontvangen van de bus, dan...
toggle led ;... de LED aan of uitzetten (togglen)
END SELECT
GOTO HoofdLus ;Ga weer naar de oneindige hoofdlus
;SUBROUTINE(S)
ZendBus: ;De bus die door het huis loopt
SEROUt uitgang,Baud, [Opdracht, Waarde] ;Zenden van de opdracht
RETURN ;Ga terug waar het programma vandaan kwam
Ik heb nu de max ic's er tussen zitten en die werken op 12V
Nu heb ik een 12V voeding met een 7805 erbij gezet om de pic's te voeden.
Als ik nu een knopje in druk om data te verzenden gaat het ledje van de 5V even heel snel dimmen en dan weer aan.
Dat kan ik op de scoop ook zien als een spanning val.
Hoe komt dit en hoe kan ik dit op lossen? grote elco er tussen? [Bericht gewijzigd door Lithium op 18 augustus 2008 22:24:50]
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
Lithium
|
Ik hoop dat iemand mij hiermee zou kunnen helpen.
Ik heb de code van firts gebruikt met de interrupts.
Die heb ik gepast omdat ik gewoon RX en TX gebruik.
De code staat hieronder, als ik wil verzenden lukt dat wel maar wil ik ontvangen lukt het me niet.
Ik weet niet wat er fout gegaan is, of iets met de interrupts denk ik of met Interrupts afhandeling.
Is er iemand die mij hiermee kan helpen?
code:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, BODEN_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief
CLEAR ;Wis alle RAM geheugen
;Logische constanten
SYMBOL HOOG = 1 ;Signaal met hoog niveau
SYMBOL LAAG = 0 ;Signaal met laag niveau
Symbol baud = 2400 ;baud snelheid communicatie
symbol timeout = 20 ;Timeout tussen communicatie
Symbol Uitgang1 = porta.1 ;Hierop zit uitgang 1 aangesloten transistor met led's
SYMBOL LED = PORTA.0 ;Hierop een LED met serieweerstand aansluiten
SYMBOL ingang = PORTB.1 ;Ingang voor seriele communicatie RX
SYMBOL uitgang = PORTB.2 ;Uitgang voor seriele communicatie TX
SYMBOL Toets = PORTB.0 ;Toets voor verzenden van een waarde over de bus
Symbol Zenden = PORTB.3 ;uitgang voor het zenden en ontvangen met de max, laag om te ontvangen en hoog om te zenden
; 76543210
PORTA = %00000000 ;Alle PORTA poorten laag
Output Uitgang1 ;Uitgang instellen
Output zenden ;Stel zenden in als output
OUTPUT LED ;Stel led in als output
Input Toets ;Stel Toets in als input
symbol antidender = 25 ;Antidender van 25ms
;Variabelen declareren
;WORD-ARRAY
DIM Buffer[4] AS WORD ;Ontvangst buffer van de USART (een array)
;WORD
DIM OntvangenData AS WORD ;Bevat de ontvangen 16-bits data vanuit USART
;BYTE
dim Opdracht as byte ;Declareren van Opdracht
DIM Waarde AS BYTE ;Eventueel retour gezonden waarde (zoals gemeten LDR waarde)
DIM BD1 AS BYTE ;Byte Dummy 1
Clear ;Wis alle ram geheugen
Zenden = laag ;Om te ontvangen via uart
;Opstart zie je dat de pic aan gaat
LED = hoog
delayMS 5
LED = Laag
ON_INTERRUPT GOTO InterruptAfhandeling ;Spring naar label als data is ontvangen door de USART
INTCON.7 = 1 ;GIE (Global Interrupt Enable) activeren
INTCON.6 = 1 ;PEIE (PEripheral Interrupt Enable) activeren
PIE1.5 = 1 ;RCIE (USART ReCeive Interrupt Enable) activeren
GOTO HoofdLus ;Spring over subroutine(s)
;SUBROUTINE zendbus is het zenden van de opdracht op de bus--------------------------------------
ZendBus: ;De bus die door het huis loopt
Zenden = hoog ;Maak pin Zenden hoog om te zenden via uart
SEROUt uitgang,Baud, [Opdracht, Waarde] ;Zenden van de opdracht
Zenden = Laag ;Maak zenden weer laag om weer te kunnen ontvangen
RETURN ;Ga terug waar het programma vandaan kwam
;------------------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------------
;HOOFDPROGRAMMA
HoofdLus:
CLEAR Opdracht ;Opdracht (na uitvoering) wissen
CLEAR Waarde ;Idem voor 'Waarde'
IF Buffer[0] > 0 THEN ;Zolang er zich een opdracht in de buffer bevindt, dan...
Opdracht = Buffer[0] & 255 ;De laagste 8 bits bevatten de Opdrachtbyte
Waarde = Buffer[0] >> 8 ;De hoogste 8 bits bevatten een eventueel meegezonden waarde
Buffer[0] = Buffer[1] ;Schuif de waarden die in de buffer zitten 1 verder door
Buffer[1] = Buffer[2]
Buffer[2] = Buffer[3]
Buffer[3] = 0 ;Maak laatste bufferplaats leeg (opdracht en waarde wissen)
GOTO OpdrachtUitvoeren ;Voer opdracht uit
ENDIF
;-----------------------------------------------------------------------------------------------
;Hoofdlus voor toetsen zenden en andere dingen--------------------------------------------------
IF Toets = LAAG THEN ;Als toets wordt ingedrukt, dan...
Opdracht = 26 ;Verzendt waarde 26 over de bus
GOSUB ZendBus ;Ga naar Subroutine zendbus
DELAYMS 2 ;Antidender voor indrukken van de toets
WHILE Toets = Laag : WEND ;Wacht tot toets wordt losgelaten, anders blijft hij zenden
DELAYMS 2 ;Antidender voor loslaten van de toets
ENDIF
GOTO HoofdLus ; Ga naar hoofdlus
;------------------------------------------------------------------------------------------------
;SUBROUTINE opdrachtuitvoeren, opdracht die binnen gekomen is wordt hier uitgevoerd--------------
OpdrachtUitvoeren: ;Subroutine opdracht uivoeren
SELECT Opdracht ;Deze SELECT lijst bepaalt wat een ontvangen opdracht gaat doen
CASE 26 ;Als de waarde '26' is ontvangen van de bus, dan...
Toggle uitgang1 ;... de LED aan of uitzetten (togglen)
END SELECT
GOTO HoofdLus ;Ga weer naar de oneindige hoofdlus
;------------------------------------------------------------------------------------------------
;SUBROUTINE interruptafhandelen, als er data binnen komt wordt het hier afgehandeld--------------
InterruptAfhandeling: ;Uitlezen en leegschuiven van buffer gebeurt in hoofdprogramma
SERIn ingang, baud, 7, verder, [OntvangenData] ;ontvangen van de data
FOR BD1 = 0 TO 3 ;Buffer met plaats voor maximaal 4 WORD arrays (0...3)
IF Buffer[BD1] = 0 THEN ;Bufferplaats nog leeg? Dan...
Buffer[BD1] = OntvangenData ;...hierin de ontvangen data plaatsen, en...
BREAK ;...uit de FOR...NEXT lus springen
ENDIF
NEXT
Verder: ;In het geval van een time-out, hier verder gaan
CONTEXT RESTORE ;Restore registers, ga terug naar plek waar interrupt ontstond
GOTO HoofdLus ;Zekerheid, eigenlijk staat dit er overbodig
[Bericht gewijzigd door Lithium op 19 augustus 2008 19:28:05]
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|
Frits Kieftenbelt
Honourable member
|
Als je beide PIC's precies hetzelfde hebt aangesloten en beide PIC's hebben hetzelfde programma dan móet het in beide richtingen werken.
Er zit iets scheef bij je schakeling.
Ohm sweet Ohm l www.picbasic.nl
|
Lithium
|
Even een update,
De test opstelling werkt prima, kan netjes een led togglen door een andere pic.
Heb ook al een grafisch lcd scherm aangesloten op mijn master pic (16f877a)
Nu ben ik met de laatste fase bezig om een DCF-77 klok op me pic aan te sluiten samen met de licht sterkte en temperatuur op een display te zetten.
Ook elke minuut wordt de tijd, lichtsterkte en temperatuur door verzonden.
Moet alleen nog even kijken of dat allemaal lukt.
Hier een plaatje van mijn test print...
Ik gebruik het zend gedeelte via een transistor zoals frits die ook gebruikt.
Verder gebruik ik me eigen inbreng op andere spullen.
Zat te werken en had mijn module buiten gehanden om de tijd binnen te krijgen.
Lekker gaan eten en toen begon het te regenen en ik ben vergeten de module binnen te hangen.
helaas is hij nu overleden
Plaatje:
Dit is een test printje dat ik heb laten etsen.
Kijken of het geheel netjes werkt op printje en daar kan ik mooi mee verder testen.

helaas herkent het programma niet alle onderdelen zoals hier de condensator...
Wel ideaal om eens te bekijken hoe het eruit gaat zien. [Bericht gewijzigd door Lithium op 7 september 2008 20:04:50]
Wat is groot wat is klein? Wat is duur en wat is goedkoop? Alles is relatief!
|