| Autor | Nachricht |
|---|
engr.waqas
Beitritt: 21. Jul 2009 Beiträge: 7 Lage: karachi
| 04 Aug 2009 8:39 Pic Zusammenwirken mit LCD-Problem? | | |
|
| Ich habe die Daten in die PIC-Controller von LM35 temp sensor.Now Ich will, um die Lesung des Temp-Sensor zu LCD-Display. Sollte ich diesen Wert auf ASCII, bevor Sie auf LCD-oder es ist bereits in ASCII. Wenn ich, um die Umwandlung in ASCII dann, wie man das in C MPLAB. |
|
| Zurück zum Anfang | |
 |
arthur0
Beitritt: 28. Nov 2003 Beiträge: 41 Geholfen: 2 Ort: Stockholm, Schweden
| 04 Aug 2009 9:59 Re: Pic Zusammenwirken mit LCD-Problem? | | |
|
| Hi, Nicht nur müssen Sie Ihre "Daten", um ASCII, aber Sie müssen auch zu konvertieren, dass "Daten" in Grad, weil die Daten, die Sie sprechen, ist nur eine numerische Repräsentation (vorausgesetzt, Sie haben die Verwendung PIC ADC) von der Spannung an die Ausgabe von Ihrem Temperatursensor. Da Sie nicht viel sagen über das, was du tust, werde ich davon ausgehen, dass Sie tatsächlich Probe dieser Spannung regelmäßig und Quantifizierung der Proben (Express sie numerisch) mit einem ADC. Das gibt Ihnen einen Hinweis darauf, wie groß die Spannung ist im Vergleich mit dem ADC Referenzspannung (was auch immer Sie sich, dass zu). Nach bezifferten den absoluten Wert der Spannung, dann Querverweis mit dem Datenblatt, das Ihnen einen numerischen Wert, der eine Temperatur in Grad Celsius. (Ich glaube, das Datenblatt nennt 10mV / ° C, so dass, wenn Ihre Spannung ist, sagen, 230mV, ist die Temperatur 230/10 = 23 ° C) Dies ist jetzt nur eine Nummer, keine Text-oder ASCII-oder was auch immer. Um die man zum Text, Sie können Sie entweder | Code: | | sprintf (receiving_text_buffer, "% d", numeric_temp) | oder Sie eine benutzerdefinierte Algorithmus, Spleiße Ihre Nummer in seine Ziffern (durch Verwendung einer Kombination von Spaltung und repetitive-Modul mit / 10, zum Beispiel) und anschließend den ASCII-Wert der Zeichen'0 'zu jedem von ihnen, um ihre äquivalente ASCII-Werte. Ich hoffe, das macht Sinn für Sie ...
Arthur |
|
| Zurück zum Anfang | |
 |
engr.waqas
Beitritt: 21. Jul 2009 Beiträge: 7 Lage: karachi
| 04 Aug 2009 10:59 Re: Pic Zusammenwirken mit LCD-Problem? | | |
|
| Vielen Dank, liebe Eigentlich habe ich getan, dass "gewisse Umstellung Option" u gesagt, aber jetzt das Problem ist, dass ich mich richtigen Wert auf dem LCD für temp 0 to9, sondern als ich im Temp-Sensor bis 10 oder andere 2-stellige ich : 10 , Für 11, <12 = 13 > 14 ? für 15 und wieder 0 16 1 für 17 und so weiter Das bedeutet nicht immer corrrect Anzeige auf dem LCD für 2-stellige Werte. Mein C-Codierung ist in MPLAB # include <P18f452.h> # define iData PORTD # define RS PORTBbits.RB0 # define rw PORTBbits.RB1 # define en PORTBbits.RB2 void lcdcmd (unsigned char); void MSDelay (unsigned int); void main (void) ( int lbyte, hbyte, bin; unsigned char x, y, z;
/ / A bis D
TRISD = 0; TRISAbits.TRISA0 = 1; TRISAbits.TRISA2 = 1; ADCON0 = 0x81; / / fosc/64, Kanal 0, A \ D ist auf ADCON1 = 0xC5; / / rechtsbündig, fosc/64, AN0 = analog, AN3 = Vref while (1) ( MSDelay (1), / / die A / D-Zeit für die Probe ADCON0bits.GO = 1; / / Konvertierung starten while (ADCON0bits.DONE == 1); / / warten, EOC lbyte = ADRESL; / / save Low-Byte hbyte = ADRESH; / / save high byte lbyte>> = 2; lbyte & = 0x3F; hbyte <<= 6; hbyte & = 0xC0; bin = lbyte | hbyte;
/ / Anzeige auf dem LCD TRISD = 0; TRISB = 0; EN = 0; MSDelay (1); lcdcmd (0x38); MSDelay (1); lcdcmd (0x0E); MSDelay (1); lcdcmd (0x01); MSDelay (1); lcdcmd (0x06); MSDelay (1); lcdcmd (0x86); MSDelay (1); / / jetzt x = bin & 0x0F; / / Maske oberen 4 Bit y = x | 0x30; / / Make it ASCII PORTD = y; RS = 1; rw = 0; de = 1; MSDelay (1); EN = 0; y = bin & 0xF0; / / Maske unteren 4 Bit y = y>> 4 / / Verlagerung auf untere 4 Bit MSDelay (50); PORTD = y | 0x30; / / Make it ascii
) ) void lcdcmd (unsigned char Wert) ( iData = value; RS = 0; rw = 0; de = 1; MSDelay (1); EN = 0; )
void MSDelay (unsigned int itime) ( unsigned int i; unsigned char j; for (i = 0; i <itime; i ) for (j = 0; j <135; j ); ) |
|
| Zurück zum Anfang | |
 |
arthur0
Beitritt: 28. Nov 2003 Beiträge: 41 Geholfen: 2 Ort: Stockholm, Schweden
| 04 Aug 2009 11:24 Re: Pic Zusammenwirken mit LCD-Problem? | | |
|
| Haben Sie nicht beachten, was ich schrieb oben: Sie müssen Ihre Zahlen in die Komponente Ziffern! Zum Beispiel die Nummer 15 Sie möchten als 1, 5. Für 2-stellige Zahlen, können Sie dies wie folgt aus: | Code: | digit0 = Zahl% 10; / * Schritt 1: digit0 = 5 * / digit1 = Anzahl / 10; / * Schritt 2: digit1 = 1 * / |
Wenn Sie mehr Stellen Sie ersetzen * Schritt 2 * mit | Zitat: | | Zahl = Anzahl / 10 | und wiederholen Sie Schritt 1 * * von den obigen Code wie nötig. (Beachten Sie, dass Sie die Ziffern in umgekehrter Reihenfolge!) Hoffe, es ist jetzt klarer.
Arthur |
|
| Zurück zum Anfang | |
 |
engr.waqas
Beitritt: 21. Jul 2009 Beiträge: 7 Lage: karachi
| 04 Aug 2009 11:47 Re: Pic Zusammenwirken mit LCD-Problem? | | |
|
| Ich denke, die spliting Teil und Konvertieren Teil wird in diesem Teil der Kodierung Das bin enthält Daten aus Temp-Sensor. x = bin & 0x0F; / / Maske oberen 4 Bit y = x | 0x30; / / es ASCII und Display PORTD = y; RS = 1; rw = 0; de = 1; MSDelay (1); EN = 0; y = bin & 0xF0; / / Maske unteren 4 Bit y = y>> 4 / / Verlagerung auf untere 4 Bit MSDelay (50); PORTD = y | 0x30; / / ascii machen und Anzeige |
|
| Zurück zum Anfang | |
 |
Google AdSense

| 04 Aug 2009 11:47 Anzeigen | | |
|
|
|
|
| Zurück zum Anfang | |
 |
Vipul
Joined: 04 Jul 2008 Beiträge: 15 Geholfen: 1 Lage: Ahemdabad, Indien
| 04 Aug 2009 12:40 Pic Zusammenwirken mit LCD-Problem? | | |
|
| Wie schrieb Arthur zuvor müssen Sie konvertieren Ergebnis der ADC in "Grad" Form, dann Druck auf den LCD-...
Im obigen Programm u direkt Druck "bin"-Variable, ist infolge der geringeren fusionieren und höhere Bit ADC Register ...
-Vipul |
|
| Zurück zum Anfang | |
 |
arthur0
Beitritt: 28. Nov 2003 Beiträge: 41 Geholfen: 2 Ort: Stockholm, Schweden
| 04 Aug 2009 13:40 Re: Pic Zusammenwirken mit LCD-Problem? | | |
|
| | Zitat: | | Ich denke, die spliting Teil und Konvertieren Teil wird in diesem Teil der Kodierung | Nein! Was Sie in diesem Teil des Codes ist nur ein bisschen Maskierung isolieren, in dem Sie ein Symbol in der hexadezimale Nummerierung System (0h - FH, entsprechend 0 - 15 im Dezimalsystem). Eine Ziffer ist, per Definition, eine Zahl von 0 bis 9 in der Dezimal-Nummerierung System.
Ich hatte Angst, dies würde kochen bis zu einer Diskussion mit den Worten "binary", "Hex", "Dezimal", "Anzahl", "ASCII" usw., da ihre Bedeutungen sind am besten in der Schule und verstanden über [Festplatte] Arbeit . Es ist nicht gut für die Substitution. Ich kann einfach schreiben Sie den Code für Sie, aber wir werden beide verlieren: mich wertvolle Zeit, und Sie den Punkt mit allen von ihr! Lassen Sie mich es für Sie ein weiteres Mal statt (für maximal 3-stellige Zahl, sagen wir 137): | Code: | char D0, D1, D2; d2 = bin% 10; / * d2 <- 7 * / d1 = (bin / 10)% 10; / * d1 <- 3 * / d0 = ((bin / 10) / 10)% 10; / * d0 <- 1 * / / * Weiter so für noch mehr Stellen * /
/ * Umwandeln stellig (Zahlen) in ASCII (Text-Zeichen) * / d0 ='0 '; / * wie d0 = d0 '0' wie d0 = d0 | 0x30 * / d1 ='0 '; d2 ='0 ';
/ * ASCII-Zeichen in den Hafen * / / * ... * / | Können Sie dies tun schöner, könnte man es ein wenig besser, aber für Sie zu verstehen, ich wollte zeigen, all die kleinen Schritte, die Sie verpasst haben, und auch darauf, wie die Ziffern extrahiert werden können rekursiv, aber das ist deine Hausaufgaben.
So wird, was die Umstellung für Sie, aber ich bin nicht davon überzeugt, Sill, dass das, was Sie sehen, Temperatur, da ist nichts in Ihrem Programm, das wie ein "Volt auf Maß" Umwandlung, es sei denn, Sie haben gewählt, eine Spannung auf, dass Ihre ADC tatsächlich machen es für Sie.
Arthur |
|
| Zurück zum Anfang | |
 |