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..........

zaterdag 18 mei 2013

Netwerk problemen binnens huis.

Zoals jullie gemerkt hebben is het hier even stil.
De oorzaak is dat we in huis een groot probleem hebben met ons netwerk.
Op de een op andere dag deden diverse problemen voor op het netwerk zoals pagina's die niet meer wilde laden , programma's gaven fouten aan naar het netwerk toe, noem maar op.

Vandaag begonnen met de hoofdrouter te vervangen , die de boosdoener bleek te zijn na lang testen.
De oude DLink router, de wrt-54g , heeft zo te zien zijn geest gegeven na ruim 7 jaar 24 uur online te zijn.
Gelukkig had ik nog de DLink -655 liggen wat ik nog niet gebruikt had.

Nu ben ik langzaam bezig alles om te zetten en te herconfigureren wat uiteraard wat tijd vergt.
3 kwart van het netwerk is nu weer online op enkele belangrijke onderdelen zoals de draadloze verbinding met de Raspberry Pi.

Ik probeer uiteraard er spoed achter te zetten, maar met het werk , opbouw van de nieuwe serre enz., gaat het iets gestaag.

Uiteraard doe ik mijn best om zo snel mogelijk weer de draad te kunnen oppakken.

Om alvast een update te geven wat de vorderingen zijn op dit moment.
De software voor android om de unit te bedienen gaat vrij lekker snel.
  • Het aansturen van de GPIO pinnen lukt al.
  • Het sturen van berichten (soort sms basis) naar een willekeurig scherm is voor 95% klaar en werkend.
  • Uitlezen van aangesloten hardware of scannen ernaar werkt ook.
Maar nu weer verder met het netwerk in orde te krijgen eer we verder kunnen met alles.

 

maandag 22 april 2013

I²C applicatie voor mainunit.(update 24-04-2013)

Aangezien ik even weer op onderdelen moet wachten voor enkele projecten hier op mijn blog, ben ik mij gaan verdiepen in het schrijven van Android applicaties .
Mijn achtergrond gedachte is de mogelijk hebben om zowel gegevens uit te lezen via een Android toetsel als het bedienen ervan.
Er zijn 2 bekende Android applicaties waarmee je dit kunt realiseren, namelijk.: Eclipse ADT en Basic4Android.

Ik ben momenteel aan het testen in Eclipse ADT, hier heb ik reeds al een connectie met de database kunnen krijgen en nu bezig met enkele menu's.
Het is allemaal nog standaard kwa kleur enz. maar op het einde zal dit worden aangepast.
Tot op heden heb ik onderstaand en werkend.






Update 24-04-2013:

Bediening van GPIO pinnen functioneert nu.
Iets aan de layout gedaan maar moet nog verder aan geschroefd worden.









zaterdag 13 april 2013

Touch screen maken op I²C bus.

Momenteel bezig met een concept voor I²C bus.
Het is de bedoeling dat er een toetsenbord komt met scherm in de keuken op zo een dun mogelijke manier.
Dit zou ik kunnen realiseren met een mpr121 capacitive touch sensor.





De pinout van deze ic ziet er zo uit.


Deze ic is zo klein dat er een degelijke print en precies gewerkt moet worden.
De ic is zo een 3mm breed en lang.

Momenteel probeer ik een print te ontwerpen waarop ik deze kan plaatsen om te testen.
Ik heb er 3 in bezit dus 1 kan ik missen om te testen.

Test printje gisteren gemaakt, was even testen want ik had nog nooit zo een ic gesoldeerd waarbij de pinnen aan de onderkant zitten.
Ik had diverse youtube filmpjes bekeken om te kijken hoe dit het beste gedaan kon worden als je niet in bezit was van een reflowoven en smd flux.
En ik moet zeggen het is me in 1 keer gelukt , dus nu kan ik gaan testen of het daadwerkelijk werkt.
Hierbij alvast het resultaat van reflow zonder reflow oven te hebben.



(word vervolgt).

woensdag 10 april 2013

Raspberry Hoofdunit deel 4.

Eerder genoemd hier bleek toch dat die blauwe trafo dus te weinig te leveren om de Pi aan de praat te houden.

Tijdens het opruimen van onze zolder ben ik een kleine adapter tegen gekomen die 5V à 2 ampère leverd.
Deze heb ik opengebroken en in de Unit erbij gezet.
Deze voed dus nu de Raspberry Pi en de I²C bus zoveel mogelijk.

Tevens werkte 2 van bedieningsknoppen niet fatsoenlijk dus deze zijn ook vervangen.

Die blauwe trafo was 12V, dus die heb ik laten zitten en de spanningsregelaar van 5V eraf gehaald en een van 12V erop gezet waarop ik de koel ventilator voor de unit nu op heb gezet.
Natuurlijk is het nu met 4 trafo's een overkill maar beter dit als de boel weer moeten slopen.

Nu bezig met de software te schrijven van de mainunit , dus voor de LCD, buttons en de hart van de unit.

maandag 1 april 2013

Snelheid I²C bus aanpassen.

In sommige hardware gevallen kan het gebeuren dat ze niet herkend worden of  dat je de ene moment wel gegevens kan oproepen en de ander moment fouten krijgt.

Dit zou wel eens aan de snelheid van de I²Cbus liggen dat deze te hoog is.


Om te kijken of dit inderdaad het probleem zou kunnen zijn , kun je de snelheid hiervan aanpassen door bv. het volgende te doen in de console.:

sudo modprobe - r i2c_bcm2708
sudo modprobe i2c_bcm2708 baudrate=32000
Om te controleren wat je huidige baudrate is typ je dit in je console
sudo cat /sys/module/i2c_bcm2708/parameters/baudrate
Zou dit inderdaad je probleem oplossen kun je dit ook voorgoed software matig vastzetten in je Raspberry Pi door dit commando in de console te typen.
 options i2c_bcm2708 baudrate=32000

In mijn geval heb ik dit wel gedaan , aangezien het altijd wat beter is iets langzamer gegevens binnen te krijgen , dan weet je wel dat het goed gebeurd ;)

zondag 31 maart 2013

I²C Real time Clock

Als je de Raspberry Pi op internet hebt staan heb je altijd de juiste tijd en datum, maar wat als je de Raspberry Pi eens voor een lange tijd niet op internet hebt staan, dan loopt je tijd niet meer goed en als je alle pech hebt ben je datum en tijd kwijt.

Om dit te voorkomen kunnen we gebruik maken van een Realtime Clock.
Dit is een ds1307 IC die de datum en tijd onthoud aan de hand van een knoop batterij van 3V.



Deze ds1307 werkt perfect op I²C want hij werkt op 5V.

Om deze op het I²C te zetten bouwen we de volgende schema op.

Alle poorten moeten we dus aansluiten behalve de SQW/OUT poort niet , deze blijft vrij.

Proef opstelling van bovenstaande.:


Eerst laden de RTC module door het volgende te typen.:
pi@raspberrypi ~ $ sudo modprobe rtc-ds1307

Als alles aangesloten is krijgt deze adres 0x68 toegewezen.
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Het onderstaande gedeelte is niet verplicht want je kunt met bovenstaande het wel laten werken via Python maar de zonder python niet , wil je het niet zonder ython laten werken dan kun je onderstaande gebruiken.
 
Type in de console het volgende.:
pi@raspberrypi ~ $ echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

Dit doen we om de real time clock vast als adres in de I²C lijn te krijgen , als je de real time clock nu van het systeem zou verwijderen blijft het adres UU toch zichtbaar (dit is zo lang je niet opnieuw de software op je sd kaart zet).
Als je opnieuw een detectie doet ziet men dat de realtime clock is aangepast naar UU.:
pi@raspberrypi ~ $ sudo i2cdetect -y 1

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Om te testen of iets word getoond van tijd en datum proberen we in de console het volgende.:
pi@raspberrypi ~ $ cat /sys/class/rtc/rtc0/time
00:00:00
pi@raspberrypi ~ $ cat /sys/class/rtc/rtc0/date
2000-01-01
Of controleer de tijd met sudo hwclock - r die de tijd van de DS1307 module lezen zal.
Als dit de eerste keer is dat de module gebruikt word, zal het resultaat Jan 1 2000 zijn.

Nu om de tijd in de realtime clock vast te zetten wat van de RPI afkomt (die is wel juist) typen we het volgende.:
pi@raspberrypi ~ $ sudo hwclock -w

Als we nu opnieuw tijd en datum oproepen via sudo hwclock -r zie je dat het wel goed ingesteld is.
pi@raspberrypi ~ $ cat /sys/class/rtc/rtc0/time
10:12:38
pi@raspberrypi ~ $ cat /sys/class/rtc/rtc0/date
2013-03-31

Update.:

Printje is nu klaar en werkend.

Je ziet rechts boven in nog 1 pin vrij.
Het schijnt volgens de datasheet van de ds1307 ic dat die SQW/OUT wat ik eerder vermelde vrij te houden gebruikt kan worden voor het alarm.
Dus die pin heb ik erbij gemaakt voor eventueel later te gaan gebruiken.

Als je het gedeelte zou gebruiken dat je met Python de tijd en datum zou willen uitlezen kun je deze code gebruiken.:

#!/usr/bin/python
# Raspberryboard I2C bus scan V0.1
# voor de Raspberry Pi Revision 2
#
# Author : Pascal Schuffelers
# Site   : http://www.vbib.be
# 
# Date   : 3/03/2013 tijd.: 19:57 uur.
#
# Uitlezen van Realtime Clock

import smbus

def BCD2Up( bcd ):    # Functie om de 4 hogere bits weg te halen van de byte
        return (str(bcd >> 4))

def BCD2Lo( bcd ):     # Functie om de 4 lagere bits weg te halen van de byte
        return (str(bcd & 0x0F))

bus = smbus.SMBus(1)  # bus number 1

czas = []
data = []

# Lees ruwe data van DS1307
sec = bus.read_byte_data(0x68, 0)
min = bus.read_byte_data(0x68, 1)
hour = bus.read_byte_data(0x68, 2)
day = bus.read_byte_data(0x68, 3)
date = bus.read_byte_data(0x68, 4)
month = bus.read_byte_data(0x68, 5)
year = bus.read_byte_data(0x68, 6)

# converteer naar strings
czas.append(BCD2Up(hour & 0x3F))
czas.append(BCD2Lo(hour & 0x3F))
czas.append(BCD2Up(min))
czas.append(BCD2Lo(min))
czas.append(BCD2Up(sec))
czas.append(BCD2Lo(sec))

data.append(BCD2Up(date))
data.append(BCD2Lo(date))
data.append(BCD2Up(month))
data.append(BCD2Lo(month))
data.append(BCD2Up(year))
data.append(BCD2Lo(year))

sc = czas[0] + czas[1] + ':' + czas[2] + czas[3] + ':' + czas[4] + czas[5]
sd = data[0] + data[1] + '/' + data[2] + data[3] + '/20' + data[4] + data[5]

print "Huidige tijd is: " + sc + "   " + sd

donderdag 28 maart 2013

DHT11 temperatuur en luchtvochtigheid sensor op I²C

Vervolg op dit stuk.: LINK 

Ik spreek dus over deze sensor.:
Deze sluit ik aan op de print die ik ook eerder in mijn blog heb genoemd , die dus 1 wire hardware omvormt naar I²C.


 
Word aan gewerkt.

I²C-bus en Main Unit Voedingen/Omvormers (Geupdate 03-04-2013)

Omdat ik enkele hardware prints ga maken die op 3.3V werken en het bus systeem op 5V werkt moet ik dus gaan omvormen.
Om dit voor elkaar te krijgen maak ik gebruik van een LM1085-3.3 Spanningsregelaar Positief Fixed.





Hier kan ik netjes 5V op zetten en er komt precies 3.3V uit.
De schema ziet er zo uit.:


Van het printje heb ik geen foto gemaakt want het is eigenlijk maar een printje met 2 kroonsteentjes , de LM1085 en 2 condensatortjes, rechtop rechtaan dus.

Update 30-03-2013 .:
Omdat de testvoeding voor de main unit in principe nu goed is, kan een goede voeding op print gemaakt worden, wetende wat nu het verbruik ervan is.

Om de Raspberry Pi te voeden en ook de I²C-bus ga ik gebruik maken van deze.:


Printtrafo met bevestigingsoren, 
prim:230 volt sec:12-0-12 volt (of 1x24volt), 1Amp (24VA), 
geheel ingegoten model gewikkeld op twee aparte kamers, 
afm:64x54x45mm de flappen niet meegerekend.

En om beide lcd's en overige te voeden , ga ik gebruik maken van deze.

Printtrafo 9Volt-366mA-3,2VA.
Afm: 41x35x23mm

Alleen moet ik , door pasen dit weekend, wachten ergens tot komende week eer ik die krijg geleverd.

Update 03-04-2013.

Trafo's zijn binnen en print is klaar om getest te worden.






Tevens gekozen voor alles met connectors te doen zodat uitwisselen of vervangen van de print makkelijker gaat zonder alles te moeten slopen.

 
 
Update 06-04-2013.
 
 
Tijdens het meten bleek alles normaal goed te werken, maar na alles goed aangesloten te hebben kwam ik tot de conclusie dat de blauw gekleurde trafo te min aan amperage te leveren.
 
Om te berekenen wat een trafo aan voltage en amperage leverd na gelijkrichten kun je deze formules aanhouden.:
 
 
DC spanning = 1,4 * AC spanning
DC stroom = AC Stroom / 1,4
 
Nieuwe sterkere trafo is besteld en zal maandag in bezit zijn als alles goed verloopt.