PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TTL 3,3V an atmega mit 5V (genauer NL552 ETTL)



The Man
16.12.2010, 20:08
Hallo,

ich will ein NL552 ETTL an einen Atmega48 mit 5V anschließen. Das Modul läuft mit 5V, gibt aber an der Schnittstelle nur 3,3V TTL aus. Im Datenblatt zum AVR steht, dass ein Highpegel mindestens 0,6 * Vcc braucht macht bei 5V = 3V. Aber kann das schon reichen, um über eventuell verlängerte Flanken die UART durcheinander zu bringen??
Hat so etwas in der Richtung schon mal einer von euch gemacht??
(Ich wollte mir halt den Pegelwandler sparen und so schnell komm ich da jetzt auch nicht dran...)

The Man

PICture
16.12.2010, 21:07
Hallo The Man!

Ich kenne sowohl NL552 (habe kein Datenblatt gefunden) als auch Atmega48 leider nicht. Der H-Pegel lässt sich allgemein mit einer Diode um ihre Durchflussspannung erhöhen (siehe Code).

MfG

VCC=5V
+
|
.-.
| | R
| |
D '-'
|
In 3,3V Logik >-----|<-+-----> Out 5V Logik



(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

hardware.bas
16.12.2010, 21:19
.... um den gleichen Pegel ziehe ich jedoch den L-Pegel hoch... Vg Micha

PICture
16.12.2010, 21:27
Das könnte eben ein Problem sein. ;)

Das müsste man mit verschiedenen Dioden bis Schottky probieren. Im schlimmsten Fall geht es leider ohne echten Pegelwandler nicht. :(

MfG

Besserwessi
16.12.2010, 21:41
Den Pegel per Diode (mit einen Kondensator parallel) anzuheben ist schon eine Möglichkeit, braucht nur etwas Strom. Was für eine Diode man nimmt ist relativ unkritisch. Ob man nur bei 3.5 V oder 4 V las High Pegel und 0.2 V oder 0.7 V als low ankommt ist relativ egal. Normal wird auch der 3 V Pegel schon reichen. Je nach IC /Modul geht auch ein einfacher Pullup Widerstand.

Als Pegelwandler würde sich ein IC der Serie 74HCT... anbieten.

Es könnte auch reichen die Spannung am µC zureduzieren, z.B. auf 4,5 V.

Janigut
16.12.2010, 22:55
Wie siehts eigentlich damit aus, einen Pegelwandler aus je einem NPN- und einem PNP-Transistor pro Signalleitung aufzubauen?
Oder Optokoppler?

The Man
17.12.2010, 12:43
Hm... this is wired.

Ich habe jetzt einfach mal eine Loopback gemacht, indem ich den UART Sender aktiviert habe und den Inhalt vom Empfangsregister direkt ins Ausgangsregister schreibe.
Mit dem USB Logicanalyzer ist schön zu sehen, wie das was reingeht sauber wieder rausgeht. Nur die Segmentanzeige sagt was anderes...(obwohl sie mir bei verschiedenen Dingen schon gute Dienste leistet).
Ich muss irgendwo nen Bock geschossen haben.

The Man

PS.: ich kann leider keine Bilder mehr hochladen, weil ich mein Limit erreicht habe. Wie macht ihr das?

Besserwessi
17.12.2010, 13:19
Bei den Bildern kann man durch das passende Datenformat einiges an Größe sparen (jetzt ist es aber zu spät).

Strichzeichungen wie Schaltpläne als .PNG (notfalls auch GIF). Bei Fotos (JPG) halt auf die Größe und Komprimierung achten - mehr als etwa 50 KB muss ein Foto meist nicht haben.

hardware.bas
17.12.2010, 22:13
en zitlich keine Probleme macht, könnte man einen ADC-Pin nehmen.
VG Micha

damfino
18.12.2010, 11:01
Ich hab den 507 ETTL (3.3V) direkt am Atmega(5V), mit dem Auslesen der Daten gibt es keine Probleme.
Wenn man dem Modul Befehle geben will, wird man aber um einen Pegelwandler nicht herumkommen, vielleicht genügt dafür auch ein Spannungsteiler.

LG!

The Man
20.12.2010, 21:59
@damfino:

Mit welchem Vorgehen liest du das Modul denn aus? Auf dem Logikanalyzer kann ich wie gesagt alles sehen, nur erfassen klappt einfach nicht. Was ich aktuell versuche ist, das Pattern $GPGGA zu erkennen und dann die Bytes bis zur Ortsangabe zu zählen, und auf einer Segmentanzeige auszugeben. Aber ich bekomme nichts raus.

Daher die Frage, nach welchem Verfahren dein Code das Modul ausliest.

damfino
21.12.2010, 19:51
Ich hab den Code irgendwo im Internet gefunden und angepasst. Es wird einmal auf ein "$" gewartet, erst wenn das empfangen wird, wird der Header und dann die einzelnen Daten ausgelesen. Dabei wird im Getgps immer bis zu einem bestimmten Symbol ein String zusammengebaut, zB sind die meisten Daten zwischen "," zu finden. Teilweise suche ich mir auch nur die Vor- oder Nachkommastellen raus weil ich den Rest nicht brauche.


Hier ein Auszug aus meinem Programm:
( GPS() muss regelmäßig, bzw wenn etwas im USART Buffer ist, aufgerufen werden)



/*************************
#define maxline 40

char line[maxline]; // global


GPS++++++++++++++++++++++++++++++++++++++*/
static inline void GPS()
{
char x_gps;

x_gps=0;

x_gps=USART_Receive();
if (x_gps=='$')
{
Getgps(','); //Hole den Header
if(strcmp(line,"GPGGA")==0) Gps_gga();
if(strcmp(line,"GPZDA")==0) Gps_zda();
}

}

/***************Position/Wert vom GPS***********************/
unsigned char Getgps(unsigned char end)
{
unsigned char c,i;
char komma, stern;

komma = ',';
stern = '*';

line[0]=0;
i=0;
c=0;

do
{
c=USART_Receive();
if(c==stern) return 0; //Checksumme erreicht
if(c==komma) return i; //Ende eines Wertes erreicht

if(c!=end) //Buchstaben sammeln
{
line[i]=(char)c;
i++;if (i>=maxline-1) {line[0]=0;}
line[i]=0; //End of String updaten
}

}while(c!=end);

return i;

}


void Gps_gga() //$GPGGA Meldung -----------------------------------------
{
char num, hdop,empfang;
char komma,stn, min;
short x,y;
char buffer[10];
short temp;

komma = ',';
x=0;y=0;



satcount=0; //Anzahl benutzter Satelliten
num=0;


// Uhrzeit
Getgps('.'); strcpy(zeit,line); zeit[4]=0;// Sekunden raus
Getgps(komma); //Rest
//Breitengrad
Getgps('.'); // Grad und Minuten werden nicht gebraucht
num=Getgps(komma); //Nachkommastellen
if(num!=0) {line[4]=0;y=atoi(line);} // nur die ersten 4 Stellen
Getgps(komma); // N/S ignorieren
//Längengrad
Getgps('.'); // Grad und Minuten werden nicht gebraucht
num=Getgps(komma); //Nachkommastellen
if(num!=0) {line[4]=0;x=atoi(line);}
Getgps(komma); // O/W ignorieren

// //0=kein Empfang, 1=GPS, 2=DGPS
num=Getgps(komma);
//Anzahl benutzter Satelliten
num=Getgps(komma);
if(num!=0) { satcount=(unsigned char)atoi(line);}

//HDOP Horizontal Dilution of Position
// Getgps(',');
hdop=9;
Getgps('.');
hdop=(char)atoi(line);




}

LG!

Richard
21.12.2010, 20:44
PS.: ich kann leider keine Bilder mehr hochladen, weil ich mein Limit erreicht habe. Wie macht ihr das?

Ich mit http://www.driveonweb.de/

Wenn Du Win verwendest kannst Du das sogar enbinsen und wie ein Hartware Laufwerk verwalten inklusive Freigaben u.s.w.

Mit Linux muss man etwas mehr Handarbeit machen.

Gruß Richard

The Man
26.12.2010, 21:54
Hallo,

danke für die Hilfe. Was einige geschrieben hatten stimmt. Der Weg 3,3V auf 5V geht ohne Probleme. Die andere Richtung habe ich nicht versucht. Langt für meine Zwecke aber auch.

Und danke für den Tip mit driveonweb.de

Greeeeez

oratus sum
29.12.2010, 16:20
Bei meinem BTM (Bluetooth) Modul ist es das selbe Szenario.

Aushilfe schafft ein 3V zu 5V TTL Wandler mti 4 BC547 Transistoren:

http://www.techgeek.at/?page_id=119

Funktioniert bei mir wundschön. Auch mit einem Fastrax IT300 GPS Modul.

The Man
30.12.2010, 05:14
oratus sum,

welche controller hast du denn? Ich benutzte wie gesagt die atmel megas.
Bei mir hat das ganze jetzt ohne pegelwandler gekleppt, weil der controller ab 0,6*Vcc einen highpegel erkennt.

oratus sum
30.12.2010, 10:52
Ich benutze ebenfalls die AVR Mega. Hier speziell den Mega2560.

Bei mir hat das nicht geklappt. Beim Bluetooth möchte ich außerdem auch senden, on daher ist es auch bessere für das Modul da es nicht 5v tolerant ist.

The Man
06.01.2011, 13:08
@Richard,

wie kriege ich das bei driveonwb.de hin, dass ich z.B. .txt Files und Codes bereitsstellen kann, ohne dass nach einem Passwort gefragt wird?

danke,
The Man

The Man
06.01.2011, 14:57
... nach einem kurzen Mittagsnickerchen sieht die Welt oft einfacher aus => habs gefunden

darxon69
20.01.2011, 10:02
Der Weg 3,3V auf 5V geht ohne Probleme. Die andere Richtung habe ich nicht versucht.

Also wenn ich einen einfachen bidirektionalen Levelshifter zwischen 3,3V und 5V brauche, dann mache ich das so wie in http://www.kip.uni-heidelberg.de/lhcb/Publications/external/AN97055.pdf auf Seite 10 beschrieben. Klein, gut und billig.