zondag 16 februari 2014

Binnen unit voor domotica.

Momenteel ben ik bezig op mijn idee voor de bediening van onze domotica unit op te zetten op mijn breadboard.
De unit word voorzien van een glcd scherm (128*64) met touchscreen.
Aansturing van externe units zal of via 433 MHz of via IR gebeuren.
Momenteel werkt het concept al deels.
Het glcd scherm met touch doet zijn werk.
Ik maak gebruik van een 18F4550 met op de I2C poorten een eprom om de afbeeldingen van het glcd scherm, dus knoppen enz., in op te slaan zodat de 18F4550 hiermee niet belast word.
Tevens zit er I2C Port extender op om extra poorten te creëren.
Om nog extra ingangen te maken heb ik op de sda en scl lijnen een 74HC575 en een 74HC165 gezet om hier extra inputs en outputs te maken voor leds en eventuele knoppen.
Op de I2C lijn wil ik ook een tijd/kalender Ic.
Alles werkt op de Port extender na en de 74HC575 die moet ik nog programmeren.
Zodra dit ook werkt zal er een korte demo getoond worden.

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)

maandag 12 augustus 2013

Laatste schilder werk.

De laatste handen aan het schilderwerk word gelegd.
Dan kan de garage weer opruimt worden en kunnen we eindelijk weer verder aan gaan waar we waren gebleven.

Word uiteraard tijd want dat geschuur is echt niet mijn hobby.

woensdag 24 juli 2013

Verbouwing.

Zoals jullie gemerkt hebben is het even rustig op mijn blog.
Vanwege enkele verbouwingen en aanpassingen heb ik helaas geen tijd gevonden verder te gaan met mijn blog.
Ik probeer uiteraard zo snel mogelijk vaart erachter te zetten zodat ik weer verder kan gaan met mijn project en dus ook hier op mijn blog.

Tot die tijd mijn excusses.

woensdag 12 juni 2013

Terug van vakantie.

Zo mensen na een weekje vakantie zijn we weer terug en kunnen we ons weer gaan begeven aan ons project(en) wat ik in mijn blog allemaal heb verteld.
De vakantie was gezellig.
We waren naar het kinderpark 't Loo van Greenpark geweest nabij Zwolle.
Als je ergens naar toe wilt gaan waar je kind iets kan beleven is het daar wel, je ligt vrijwel centraal om overal binnen 30 minuten te zijn.

Het was de bedoeling dat ik in die wek iets zou doen betreffende het schrijven van software voor mijn mainunit maar helaas daar geen tijd voor gevonden.

Nu we terug zijn kan hier ook weer aan gewerkt worden.

woensdag 22 mei 2013

Herstel Main Unit met succes afgerond.

Na lang heen en weer zoeken , kijken, aanpassen, downloaden, upgraden enz.
Is mijn MainUnit weer helemaal up and running.
Ik moet alleen even kijken of mijn hoofdscript om alles te draaien de aanpassingen van afgelopen dagen heeft opgeslagen , maar ik vermoed van wel.

Dus al met al, heb ik weer een beetje geluk gehad , wel een dag erover gedaan maar hij loopt weer :)


Totale Crash van Main Unit.

Ja jullie lezen het goed.
Heb ik eindelijk het thuis netwerk weer netjes op volle toeren lopen, is de Main Unit gecrashed.
Omdat ik natuurlijk mijn netwerk vernieuwd had moest ik de Pi ook even rebooten om het nieuwe ip adres actief te maken.
Door de stroom eraf te halen en weer aan te zetten bleek de desktop van het besturings systeem niet meer te laden.
Ook het inloggen wilde niet meer, idem het starten van de benodigde software wilde niet meer lukken.
Gelukkig had ik van mij scripts wel een recente backup , alleen geen image gemaakt.
Nu hopende dat de sd kaart van mijn test pi op het testboard wel dezelfde image heeft anders kun je dus al indenken dat ik dus alles opnieuw moet gaan doen.

Dus op goed geluk en veel duimen draaien..........