Beste mensen,

Laatst heb ik mijn RFM12B modules binnengekregen van samenkopen. Nu heb ik tijd om deze aan te sluiten en te gaan gebruiken maar nu loop ik tegen een probleem aan.
Deze modules werken op 3,3 Volt en de microcontroller op 5 Volt. Wil ik deze met elkaar laten communiceren moet ik dus de microcontroller op 3,3 Volt aansluiten, de i/o's van de modules zijn niet 5 Volt tolerant maar slechts tot Vdd+0,3. Als de microcontroller op 3,3 Volt word aangesloten werkt het lcd echter niet meer dat hieraan zit.

Hoe lossen jullie dit meestal op? Ik zat al te denken aan een spanningsdeler maar dat werkt maar 1 kant op, ik heb ook gezocht naar buffers die zoiets kunnen maar die heb ik niet kunnen vinden.

En nog een "bijvraag":
Is het zo dat de frequentie van je microcontroller een lagere maximale waarde krijgt als de voedingsspanning ook zakt? Dat bijvoorbeeld de maximale waarde bij 5 Volt 20MHz is en bij 3,3 Volt nog maar 16MHz, resp een machine cycle van 5MHz en 4MHz.
Kan je als dit zo is gewoon de CPU-divider gebruiken om de frequentie naar beneden te delen of moet er dan een ander kristal aan? Staat dit ergens in de datasheets van de uC's?
Ik ben vooral benieuwd hoe dit zit bij de 16F877 en de 18F4550.

Alvast bedankt!

met vriendelijke groet,

Justin

kloksnelheid is niet spanning afhankelijk. De stabiliteit van het interne kristal misschien heeeeeeeel ietsjes maar je zal er weinig van merken. De allermakkelijkste oplossing is trouwens gewoon een Low Voltage versie van de pic die je gebruikt te bestellen. Kijk even bij farnell die hebben redelijk veel types.

Verder is de datasheet bestuderen zeker een goed idee hier staat heel veel in. Verder heeft de module die jij gebruikt vast ook wel een datasheet of application note waar vast het hier beschreven probleem in staat

Bas, superbedankt voor je reactie, ik zal m'n vraag iets anders stellen:
http://i40.tinypic.com/2wp85dw.jpg

Hoe moet ik deze grafieken interpreteren? Ze staan onder het kopje "Electrical Characteristics" in de datasheet.

Zoals ik al zei gaat een Low Voltage variant niet werken in verband met de lcd die er op aan zit gesloten, mijn pic kán wel op 3,3 Volt maar het LCD niet, dat is nou juist het probleem... :(

Maar de frequentie kan volgens jou gewoon maximaal? Want in een library die ik van plan ben te gaan gebruiken voor USB communicatie staat iets anders, alleen niet zo uitgebreid vandaar dat ik het hier nog even check.

de chart geeft de werkfrekwentie aan van de pic's

bijvoorbeeld een 16F87x op 4Volt mag maximaal een xtal hebben van 16Mhz

een 16LF87x mag bij 2V een maximale frekwentie hebben van 4Mhz.

>Want in een library die ik van plan ben te gaan gebruiken voor USB communicatie staat iets anders, alleen niet zo uitgebreid vandaar dat ik het hier nog even check.

wat voor usblib is dat? een 16F heeft geen usb poort.(laat maar domme vraag je vraag ging ook nog over de 18F4550)

Hmmmmm wat je nu zegt over de processorsnelheid brengt mij aan het twijfelen. De grafiek van de datasheet zal ongetwijfeld gelijk hebben maar ik praktijk heb ik ook wel eens een pic op 3v met 20Mhz laten draaien zonder problemen. Die software wat erin zat was dan ook niet erg tijd kritisch maar toch

Iets anders wat je je af kan vragen is of je zown hoge snelheid nodig hebt..

Verder is het niet iets om je module en de pic op 3,3 volt te hangen en het lcd op 5 volt? Het is een beetje afhankelijk van je lcd maar misschien heeft die al wel genoeg aan 3,3volt signalen om het geheel aan te sturen. En anders zet je tussen de pic en het lcd wat transistoren. Met de pic stuur je dan de transistor open of dicht en zo krijgt het lcd toch zijn 5v signaal.

Een leuk chipje om van 5 volt naar 3,3 volt te gaan is trouwens de 1x AMS1117-3,3V.

Maar dickbest heeft ook nog een paar andere geloof ik

Dus, als ik het goed begrijp, mij pic kan alleen op 20MHz werken als ik hem 4,5 Volt of meer te voeden geef?
Balen...Maar dan komt het eigenlijke echte probleem naar voren; Hoe interface ik deze met een 3,3 V module? Transistors gaat niet werken want het moet bidirectioneel kunnen.

Misschien reageert de LCD wel op 3,3 volt signalen, dat word een testje. Ik heb de pic op 20MHz met 3,3 volt ook wel laten draaien alleen een kleine aanraking zorgde al voor het stoppen van de klok, hierom dus...

Opto-coupler. Niet om een galvanische scheiding te maken maar met die 3.3V kun je de LED laten oplichten zodat de transistor in opto-coupler schakeld. Andersom idem.

nee joh helemaal niet ingewikkeld.

Output 5V PIC naar 3.3V: spanningsdeler gebruiken
Input 5B PIC van 3.3: Kan wschl direct wel (testen) (anders torretje)

fripster

Op 2 februari 2009 17:38:45 schreef basz:
kloksnelheid is niet spanning afhankelijk.

Zoals de grafieken uit de datasheet laten zien is de maximaal gegarandeerde kloksnelheid wel degelijk afhankelijk van de voedingsspanning. Ik heb zelfs wel eens een vraag bij Microchip neergelegd om exacte data met betrekking tot het percentage wat eventueel wel werkte op een hogere kloksnelheid bij een lagere voedingsspanning. Hun antwoord was simpel. Houd je gewoon aan de datasheet. Want over uitzonderingen doen ze gewoon geen uitspraak.

Eventueel kan je een mooie leveltranslator gebruiken volgens dit principe.

http://www.idt.com/products/getDoc.cfm?docID=7529

en als het unidirectioneel is een 74HC245 of iets dergelijks

Op 2 februari 2009 22:46:54 schreef fripster:
nee joh helemaal niet ingewikkeld.

Output 5V PIC naar 3.3V: spanningsdeler gebruiken
Input 5B PIC van 3.3: Kan wschl direct wel (testen) (anders torretje)

fripster

Ook een prima oplossing.

[Bericht gewijzigd door Henry S. op (16%)]

wat is er mis met een doodsimpel pnp/npn paar is zo bidirectioneel te maken als je zelf wilt en gegarandeerd dat het werkt.

Op 2 februari 2009 23:14:11 schreef timmie:
wat is er mis met een doodsimpel pnp/npn paar is zo bidirectioneel te maken als je zelf wilt en gegarandeerd dat het werkt.

Hoe ziet zoiets eruit dan?

Over kloksnelheden: Mijn gok is dat je beide grafieken in de praktijk over mekaar kunt leggen. Ook de L versies zullen wel op 20MHz kunnen als je ze maar minimaal 4.5V geeft en ook de niet-L zal 4MHz bij 3.3V wel halen. Het wordt trickier als je op laag voltage snel wilt... (maar het lijkt me dat je tegenwoordig behoorlijk wat marge hebt...)

De simpelste levelshifter is een weerstand. een 2k weerstand in het draadje zorgt er voor dat als de PIC 5V stuurt, er 3.6V op de pin van het 3.3V ding komt te staan, dus 0.7 mA die door het weerstandje loopt naar de protectie diode van de de module. De andere kant op ziet je PIC 3.3V vast wel als hoog.

De andere optie is om de PIC op 3.3V te zetten, en het LCD met een buffer/levelshifter schakeling aan te sturen. Allicht dat /dat/ maar 1 richting op moet. Een HCT245 is perfect. Ergens tussen de 1.5 en de 2V het omslagpunt tussen hoog en laag. En de uitgang stuurt heel netjes 0V en 5V.

En de vieze oplossing: Het LCD wel voeden met 5V, maar aansturen met signalen die 0/3.3V zijn, en hopen dat ie de 3.3 als hoog ziet.

De oplossing word toch passief denk ik, dus met weerstanden/diodes. Nou hoor ik rew iets zeggen over protectie diodes en weerstanden; kan ik niet gewoon een weerstand in serie met een zenerdiode erachter aan de kant van de module. De zener heeft dan een waarde van +-3V3 en zorgt dat de spanning niet hoger komt dan 3,3 Volt.

Maar ik begrijp dat jullie eigenlijk altijd de pic op 3,3 Volt aansluiten. Dan moet ik maar een 877 kopen die op 3,3 Volt werkt, is toch het makkelijkst. Een LCD ziet 3,3 Volt wel als "hoog" denk ik, ik ga het gewoon proberen wat hier allemaal gezegd is.

Superbedankt voor alle reactie!

[Bericht gewijzigd door justinsane op (12%)]

@xenobil: npn/pnp paartje waar bij je een levenlshifter maakt is niks anders dan dit:


                      3v3
                      |
                     /
              --==--|
             /       \--==--receiver
sender--==--| 
             \
              gnd

legenda:
--==-- zijn weerstanden
het overige is een pnp en npn tor

de basis van de npn tor wordt aangestuurd door de zender
deze trekt de basis van de PNP laag en zorgt dat er signaal op de colllector van de pnp komt te staan en dus ook bij de zender

trucje werkt ook andersom allen moet je dan de 3v3 aanpassen voor de andere kant.
eventueel een pullup aan de basis van de pnp tor zodat hij niet tript.

PE9SMS, Superchill! In die link hebben ze het over logic level translators, die heb ik eigenlijk precies nodig. Ik ga die maar eens gauw samplen, superbedankt!

74lvc4245 dan maar ertussen ? beest heeft 2 voedingsspanningen

Nee, niet de 3-state, hierbij moet je zelf schakelen tussen richting, ik ga voor een van de maxim producten, hierbij hoeft dat niet! ;)

http://para.maxim-ic.com/en/search.mvp?fam=bidirtranslators&tree=maste…

Een logic level translator is idd wat je nodig hebt. TI is de grootste met dit spul, NXP ook wel en Maxim idd ook. Je bent niet de eerste die twee logic spanningsdomeinen wilt interfacen ;-) , dus daar bestaan deze mooie bidirectionele chippies voor. Succes ermee!

Kwam deze discussie al googlend tegen. Voor uitgangen 3.3 naar 5 is niets nodig, andersom is een weerstandsdeler genoeg. Hier een schets hoe ik e.e.a gebruik:

http://jeelab.equi4.com/2009/01/13/arduino-rfm12b-µsd/

Op 19 februari 2009 21:46:24 schreef jcw:
Kwam deze discussie al googlend tegen. Voor uitgangen 3.3 naar 5 is niets nodig, andersom is een weerstandsdeler genoeg.

Beetje kort-door-de-bocht en afhankelijk van de toepassing. Een weerstandsdeler is vaak, maar niet altijd toepasbaar. Andere kant op is voor 5V TTL 3.3v inderdaad genoeg, maar wat denk je van een niet-TTL component dat de trip op 0.7 x Vcc heeft liggen?

Simpelste is natuurlijk een geschikte 3.3v MCU (Zoals de 18F66J50), en een 3.3v lcd. Ook een stuk simpeler met voeding...

Weerstandsdelers en de meeste oplossingen met transistoren zijn erg traag. Gaat best als je onder de 200kHz werkt, maar daarboven gaat het minder worden. (weerstanden vanwege de ingangscapaciteit, transistoren omdat ze in verzadiging gaan, en dat kost bij de meeste ook wel een paar microseconde om eruit te komen. (valt ook wel weer op te lossen)