dinsdag 31 december 2013

433 mHz Relaikaart in samenwerking met Orvi.

Via Google heeft mij iemand benaderd omdat deze persoon wel goed is in printplaten maken en programmeren deels in VB6 , maar niet weg kwam in VB2005 en hoger.
Deze persoon heeft zich sinds kort aangemeld hier , op aanvraag van mij , onder de naam Orvi.
Orvi is al enige tijd bezig met een 433 mHz project en deze heb ik 2 weken geleden mogen bewonderen.
Het project werkt via de COM-Poort.

Omdat ik het zelf een heel mooi project vond, heb ik een deal met hem gesloten als ik hem zou helpen met het schrijven van de code in Visual Basic dan zou hij voor ons de prints incl. eventueel gebruikte codes uitleggen.

Momenteel kan de relais kaart alleen signalen ontvangen maar Orvi is bezig met een nieuwe print die ook signalen terug kan zenden.

Dus daarom is dit project hier nu gestart , aangezien hij mij voor enige dagen zijn prints heeft geleend om te mogen testen en ik moet echt zeggen dat ik erg ervan onder de indruk ben.
Mooi compact, en netjes gemaakt.
Het project word hier dus niet in een keer uitgelegd maar steeds bijgewerkt worden door mij want het is behoorlijk wat, maar echt de moeite waard om te volgen.
Zelf ga ik het ook proberen te maken zodat ik inzicht krijg in de exacte werking en hoe en wat.
Uiteraard zal Orvi , indien hij tijd tussen door vind ook antwoorden op vragen (deze zal ik dan weer terug verwerken in dit project).

Eerst een stukje uitleg over de RS232.
Deze interface bied een kosteneffectieve eenvoudige en betrouwbare communicatie tussen één domeincontroller naar een andere controller, of tussen een domeincontroller en PC.

RS-232 Basis.
RS-232 (aanbevolen standaard 232) is een standaard voor seriële binaire data signalen verbinding maken tussen een DTE (Data terminal equipment) en een DCE (Data Circuit-terminating Equipment).
Voltage Levels:
De RS-232-standaard definieert de spanningsniveaus die overeenkomen met een logische 1 en logische 0 niveau. Geldige signalen zijn plus of min 3 tot 25 volt. Het bereik in de buurt van nul volt is niet een geldige RS-232-niveau; logica 1 wordt gedefinieerd als een negatieve spanning, de signaal-voorwaarde wordt markering genoemd, en heeft de functionele betekenis van OFF. Logica nul is positief, de signaal-voorwaarde is afstand, en heeft de functie ON. Dus een logica nul weergegeven als + 3V aan + -25V en één logica vertegenwoordigd als - 3V aan - 25V. -


RS-232 Level Converters.
Meestal werken alle digial ICs op TTL of CMOS spanningsniveaus die niet kunnen worden gebruikt om te communiceren via RS-232-protocol. Dus een spanning of niveau converter is nodig die TTL kan converteren naar RS232 en RS232 naar TTL spanningsniveaus. De meest gebruikte RS-232 niveau converter is MAX232. Deze IC omvat een soort pomp die RS232 spanningsniveaus kan genereren (-10V en + 10V) van 5V voeding. Ook omvat deze twee ontvangers en twee zenders en is in staat full-duplex UART/USART-communicatie.


MAX232 Interfacing met Microcontrollers.
Als u wilt communiceren via UART of USART, hoeven we alleen maar drie fundamentele signalen te werken, namelijk RXD (ontvangen), TXD (verzenden), GND (common ground). Dus om de MAX232 interface met een microcontroller (AVR, ARM, 8051, PIC enz.) te communiceren moeten we enkel de fundamentele signalen gebruiken. Een eenvoudige schematisch diagram van verbindingen tussen een microcontroller en MAX232 wordt hieronder weergegeven.



Nu terug naar naar het project.
Om als eerste iets te tonen beide prints, de Relais kaart en de transmitter kaart.

De Relaiskaart op 433 mHz.


De transmitter kaart.


Om te beginnen bij de Transmitter kaart oftewel Draadloze RS232-verbinding , deze is te vinden bij elekor.nl
Alles staat netjes vermeld op deze link.:  http://www.elektor.n...ing.52309.lynkx
Voor als de link ooit niet meer zou werken hierbij alle benodigde onderdelen.:
Weerstanden:
R1...R4 = 1k8

Condensatoren:
C1,C3,C9 = 100 n
C2,C4 = 10 µ/16 V radiaal
C5...C8 = 1 µ/16 V radiaal

Halfgeleiders:
D1 = 1N4148
D2,D3,D5 = LED groen 3 mm, low current
D4 = LED rood 3 mm, low current

IC1 = 7805CP
IC2 = MAX232CP
IC3 = LPRS ER400TRS (zie tekst)

Diversen:
JP1 = 2-polige header met jumper
JP2 = 3-polige header met jumper

K1,K3 = 2-polige pen-aansluiting
K2 = 9-polige haakse sub-D-connector, female, voor printmontage
K4 = BNC-bus voor printmontage (Farnell 365-0558)

RS232-kabel (aansluitingen 1:1 doorverbonden)


De onbestukte printplaat.: https://drive.google.com/file/d/0BxdbHa5iIw4xWnROZTlZVjg1UE0/edit?usp=sharing
Het artikel compleet. zoals op de site.: https://drive.google.com/file/d/0BxdbHa5iIw4xSzhSYmY1Y1I1MlE/edit?usp=sharing
Deze software zat er ook bij , maar deze heb ik niet getest.: https://drive.google.com/file/d/0BxdbHa5iIw4xRmhrMVotdHpicFk/edit?usp=sharing

Die ER400TRS zul je moeten programmeren op de juiste frequentie en boadrate.
Je kunt het ding alleen programmeren met TTL signalen, je hebt dus een omzetter nodig van RS232 naar TTL, een max232 of dergelijk of USB naar TTL.
LET GOED OP !
standaard staat de baudrate op max, als je die met een commando veranderd ben je hem dus kwijt voor je compoort.
Dan weer baudrate opnieuw instellen van je compoort, Freq staat in dit project op CH7, alle overige zaken staan uit.
Let goed op dat je de TTL signalen naar je ER gebruikt.
Sluit je de RS232 signalen op je ER aan dan kun je voor een nieuwe gaan zoeken.

Ik ga dit doen via COM to TTL, je kunt het ook doen met USB to TTL en om die eventueel zelf te maken kun je dit schema gebruiken.:


Maar zoals ik al vermelde doe ik dit nu via COM to TTL.

De RS232-module kan worden gebruikt voor de interface van een microntroller op een PC via een RS232 verbinding (seriële poort).
Deze module rekent signalen tussen RS232 spanningsniveaus en TTL spanningsniveaus.
Het is de bi-directionele, waar TTL signalen worden geconverteerd naar RS232 niveaus en RS232 niveaus worden geconverteerd naar TTL niveaus.
De module kan worden gemonteerd met elke MAX232 compatibel RS-232 zender/ontvanger chip.

Hier heb ik een schema van gevonden dat gemaakt is via eagle.


De print komt er dan zo uit te zien voor je PCB.:


Voor diegene die met eagle zouden werken en zowel schema als PCB willen hebben hierbij de file.: https://drive.google.com/file/d/0BxdbHa5iIw4xWGxlQUVMaUJFMFE/edit?usp=sharing
Je print komt er dan zo ongeveer uit te zien.:


Voor diegene die het programma niet hebben maar wel de pint willen maken kunnen deze print gebruiken in pdf formaat.: https://drive.google.com/file/d/0BxdbHa5iIw4xaUhxaVVoOFdDdkk/edit?usp=sharing
De benodigde onderdelen zijn als volgt volgens schema.:


De software die je ervoor nodig hebt is deze.: https://drive.google.com/file/d/0BxdbHa5iIw4xUkJ4cVp3LWstYkk/edit?usp=sharing

Nou bij mij heb ik dus die COM to TTL print gemaakt en de ER400RS/TRS op een breadboardje gezet en met de COM to TTL gekoppeld , voorzien van een externe 5V adapter.
Hier een foto ervan.

Nu zijn beide TRS en RS op een baud rate van 9600 gezet en beide op kanaal 7 ook te zien in software.:


Je kunt bovenstaande stukje , dus i.p.v. de COM naar TTL ook doen met USB naar TTL.
Dit heb ik idem geprobeerd en werkt ook zonder problemen.
Dit heb ik kunnen testen door een sponsoring van www.sossolutions.nl die mij van deze kabel heeft voorzien, mijn dank hiervoor.

De transmitter die dus gebruikt word om alle signalen te versturen vanaf de COM-Poort heb ik ook nagemaakt en mijn vers ingestelde ER400TRS erin gezet en getest.
Eerste instantie werkte hij niet tot dat ik zag dat ik 1 ledje verkeerd om had staan, na correctie werkte hij wel, dit getest op de relais kaart van Orvi.
Hier te zien zonder de behuizing.


De relais kaart 8 kanaals vanOrvi in Designspark (hier heeft hij deze in gemaakt) ziet er zo uit.


Het schema van deze relaiskaart heb ik nu klaar en is hier in pdf te vinden.:
 https://drive.google.com/file/d/0BxdbHa5iIw4xQ2l5MnJXLUNSbTQ/edit?usp=sharing
Hij is niet geheel volgens de regeltjes , maar het spreekt wel voor zich zelf neem ik aan.

In mijn nagemaakte versie zit ergens een fout, welke weet ik niet, maar ben hier volop mee bezig, op een of andere manier reageert hij niet.
De ER400RE is het probleem niet , deze staat goed ingesteld 4 maal gecontroleerd.
Ondertussen heb ik het probleem/problemen gevonden.
Het bleek dus dat de geleverde IC (MCP23008 E/P) defect was, hierdoor gingen mijn relais een eigen leven leiden, hierop volgende dat deze ook verkeerde spanning doorstuurde op de print en dus ook mijn ER400RS heeft vernield, 41 euro naar de maan.
Maar goed, nieuw is besteld en hopelijk morgen/overmorgen binnen om verder te kunnen.

Alle onderdelen vandaag nieuw binnen gekregen via mijn goede vriend Dick best, kan ik heugelijk mededelen dat mijn relaiskaart nu ook werkt :)
En zo ziet dus mijn kaart eruit, niet op een proffesionele kaart zoals Orvi, maar het gaat om de werking ;)


Eerst zal ik een kleine uitleg geven over de onderdelen die gebruikt zijn geworden op de relais kaart.

Waar dient de UTP connectie en IC op de print, die op onderstaande foto zijn omcirkeld?

De UTP aansluiting kan gebruikt worden om tussen 2 prints een connectie te maken op een bepaalde afstand.
Deze afstand word bepaald door de IC die niet ingezet is geworden maar wel op de foto omcirkeld is geworden.
Hier zou een P82B715 ingezet moeten worden, dit is een I2C-bus extender.

Deze kan een afstand van maximaal 30 meter overbruggen.

De relais kaart werkt grotendeels op 5V.
De onderdelen die op 5V werken zijn hier omcirkeld.

Helemaal links op de foto zit een spanningsregelaar, deze zorgt ervoor dat de ingaande voeding om word gezet naar 5V.
Omdat de ingaande voeding 12V is maken we netjes gebruik van beide voltages.
Net naast de voltage regulator zit een MCP23008 E/P, dit is een 8-bit port expander met interrupt output die

De onderdelen die op 12V werken zijn op onderstaande foto omcirkeld.
De IC die links is omcirkeld is een ULN2803A, dit is een High Current Darlington Transistor Array, die de commando's van de MCP23008 omzet en hiermee de ralais aanstuurd.


De relaiskaart word aangestuurd door een PIC 16F648, die de signalen van de ER400RS omzet en uitvoert.
Deze is omcirkeld op de foto.


De code die in deze IC zit is in JAL geschreven maar ik zal deze ook proberen om te zetten naar Picbasic.
De code ziet er zo uit in JAL.:
-- JAL 2.0.4
include 16f648a_bert
include i2c
include mcp23008

var byte data = 0
var byte groep = 0



var volatile bit Ch1 at groep : 0
var volatile bit Ch2 at groep : 1
var volatile bit Ch3 at groep : 2
var volatile bit Ch4 at groep : 3
var volatile bit Ch5 at groep : 4
var volatile bit Ch6 at groep : 5
var volatile bit Ch7 at groep : 6
var volatile bit Ch8 at groep : 7


mcp23008_write(0b_0100_001,5, 0b_0001_0010)
mcp23008_write(0b_0100_001,0, 0b_0000_0000)

forever loop


             while ! serial_hw_read(data)loop
             end loop
                             if data == 11 then
                             ch1 = 1
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                             if data == 10 then
                             ch1 = 0
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                                 if data == 21 then
                                 ch2 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 20 then
                                 ch2 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                             if data == 31 then
                             ch3 = 1
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                             if data == 30 then
                             ch3 = 0
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                                 if data == 41 then
                                 ch4 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 40 then
                                 ch4 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if
                            
                            
                             if data == 51 then
                             ch5 = 1
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                             if data == 50 then
                             ch5 = 0
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                                 if data == 61 then
                                 ch6 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 60 then
                                 ch6 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                             if data == 71 then
                             ch7 = 1
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                             if data == 70 then
                             ch7 = 0
                             mcp23008_write(0b_0100_001,9,groep)
                             end if

                                 if data == 81 then
                                 ch8 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 80 then
                                 ch8 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                            
end loop

Ondertussen heb ik mijn print weer opnieuw gemaakt omdat ik had gezien dat 7 poorten niet werden gebruikt 3 A-poorten en 4 B poorten.
Aan de hand hiervan heb ik de banen iets verschoven waardoor ik 7 headerpinnen erbij heb kunnen plaatsen om een extra print boven op erbij te plaatsen.
Tevens heb ik een de poorten , die nodig zijn om de IC te programmeren, ook op de print aangemaakt zodat ik de IC niet steeds eruit hoef te halen.

27-12 ga ik weer bij Orvi langs om nog nieuwe info op te doen en zijn prints retour te geven , dit aangezien mijn prints nu ook werken is het niet meer nodig die van hem thuis te bewaren.

Ik ben dus 27-12 weer bij hem geweest en heb hem mijn copie van zijn kaart laten zien en verteld wat dus mijn verdere plannen was met die relai kaart.

1 van de grote veranderingen die ook het meeste tot op heden heeft gekost was om zijn JAL-code om te zetten naar Picbasic (Proton Ide) code.
Dit heeft mij toch bijna 3 weken gekost om dit te doen.
Het mooie was dat bij Orvi zijn 16F648A vol was, terwijl na omzetting van Jal naar Picbasic mijn 16F648A maar voor 40% vol was.

Van deze mogelijkheid en de poorten die hij vrij had gelaten gaf mij de mogelijkheid verder te kijken wat de optie's waren.
Na lang wikken en wegen heb ik gekozen om een 16*2 Lcd erop te zetten die van zichzelf al 4 bedieningsknoppen aan board had.


Omdat na het aansluiten van de lcd pinnen er 6 bezet bleven was nog maar 1 poort vrij.
Maar omdat ik die knoppen ook wilde gebruiken heb ik gebruik gemaakt van een pulsschakelaars-methode, die ik gevonden had op picbasic.nl van Fritz.


Uiteraard heb ik dus nu alle pinnen in gebruik met het resultaat dat de relai kaart nu ook manueel bediend kan worden.
Dit hield wel in dat ik weer 1 week bezig was om de code werkend te krijgen.
Maar omdat een menu vrij veel geheugen vergt van een ic en ik halverwege mijn menu's al op 98% zat van het geheugen, moest ik een nieuwe oplossing zoeken om een andere ic te gebruiken.
Het probleem was alleen dat ik dus die relai kaart niet nog eens opnieuw wilde gaan maken, maar door een tip van Stynus (schematheek) die mij verwezen had naar een 16F1847.
Deze heeft het dubbele geheugen van een 16F648A.
Nu is de code bijna klaar, moet nog alleen de RC5/RC6 protocol van Philips erin zetten om de IR aan te spreken die op de relaikaart zit van hem.
In ieder geval het werkt nu allemaal bijna vlekkeloos en zit op die 16F1847 nu 48.25%.

Nu in het weekend ga ik het verloop printje maken, waarmee ik die lcd op de relaikaart kan koppelen zodat mijn breadboard weer leeg gemaakt kan worden want het overzicht is bijna weg ervan ;)



(word vervolgt)

Geen opmerkingen:

Een reactie posten