Hallo alle mit einander, zurzeit programmiere ich die Serielle Schnittstelle des Mikrocontrollers, versuche eine Übertragung von einem analogen Wert das ist das Programm von Mikrocontrollers: #include <avr/io.h> //Aus und Eingänge Bibliothek #include <avr/interrupt.h> //Interrupt freischalten #include <stdio.h> //Zeichen freischalten #include <util/delay.h> // verzögeruns Bibliothek aufrufen #include <sps_lcd.h> //lcd Bibliothek Pinbelegung #include "sps_lcd.c" #include "v24_poll.c" unsigned char _analog; char _lcd_buffer[20]; ISR(INT0_vect) { PORTB|=(1<<2); } ISR(INT1_vect) { PORTB&=~(1<<2); } void initAD() { ADMUX|=(1<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX4)|(0<<MUX3)|(0<<MUX2)|(0 <<MUX1)|(0<<MUX0); /* ADMUX Zentraler Register, REFS1, REFS0 legen die Referenzspannung fest, ADLEAR wird bei starken Signalschwankungen und Rauschen verwendet für 8 Bit Ergebnisse, MUX4...0 wird für Eingänge-Verschaltung benötigt */ ADCSRA|=(1<<ADEN)|(1<<ADSC)|(0<<ADATE)|(0<<ADIF)|(0<<ADIE)|(1<<ADPS2)|(1 <<ADPS1)|(1<<ADPS0); /* ADCSRA ist ein Wandlungsvorgang Register, ADEN Analog/Digital Wandler freigeben, ADSC Wandler starten ADPS2..0 Wandlungstakt (001 – F_CPU/2, 010 - / 4, 011 – 8, ... 111 - F_CPU/128) */ } void initv24 (void) { //UCSRC = 0b10000110; //UCSRB |= ((1 << TXCIE) | (0 << RXCIE)); } void initlcd(void) { DDRD = 0xf0; // 11110000 Datenrichtigungsregister die ersten sind ausgänge PORTD =0x0f; // 00000000 lcd_init(LCD_DISP_ON); lcd_clrscr(); lcd_gotoxy(0,0); sprintf(_lcd_buffer,"%1d",_analog); lcd_puts(_lcd_buffer); } int main () { MCUCR|= (1<<ISC00)|(1<<ISC01)|(1<<ISC10)|(1<<ISC11);// bei steignder Flanke aktevieren DDRA=0x00; PORTA=0b11111110; DDRB=0xff; PORTB=0xff; v24_init(9600); while (1) { initlcd(); initAD(); _analog=ADCH; // PINA0 zugewiesen zu _analog Variable. initv24(); if(_analog<=0) { PORTB&=~(1<<1); GICR|=(1<<INT1); sei(); PORTB|=(1<<7); } else if(_analog>=50) { PORTB|=(1<<1); PORTB&=~(1<<7); GICR|=(1<<INT0); } else if((_analog>2)|(_analog<49)) { PORTB|=(1<<1); PORTB|=(1<<7); } v24_putc(_analog); } } und das ist das Programm von C# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (checkBox1.Checked == true) { serialPort1.Open(); } else { serialPort1.Close(); } } byte[] _analog = new byte[1]; private void checkBox2_CheckedChanged(object sender, EventArgs e) { if (checkBox2.Checked == true) { ; } else { ; } } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { serialPort1.Read(_analog, 0, 1); } private void progressBar1_Click(object sender, EventArgs e) { progressBar1 = _analog; } } } aus irgend einem Grund funktioniert die Kommunikation nicht
Das macht irgendwie keinen Spaß zu lesen (Formatierung, Schreibweise, hartverdrahtete Bitwerte statt sinnvoller Namen...). Und die Fehlerbeschreibung ist fast eine Beleidigung ("funktioniert nicht"). Deshalb nur der allgemeine Rat: Grenze doch das Problem ein und probiere erst mit einem Terminalprogramm etc., ob der MC etwas sendet und empfängt. Erst dann lohnt es sich, die Gegenseite anzuschauen. Evtl. auch mal über volatile nachdenken.
Und bitte nicht den gleichen unlesbaren Misthaufen auch noch in mehreren Threads aufmachen. Beitrag "V24 Schnittstelle" Sind wir hier die Deppen vom Dienst?
Man braucht für eine Serielleübertragung Mikrocontrollerseitig: die Bibliothek #include "v24_poll.c" Variable in Char char _analog; den Befehl um die Baudrate einzustellen v24_init(9600); den Befehl um die Variable zu versenden V24_putc(_analog); c# seitig: serialPort1.Open(); serialPort1.Read(_analog, 0, 1); das müsste doch für die minimale Übertragung reichen ??
Klaus Wachtler schrieb: > Sind wir hier die Deppen vom Dienst? Nach seiner letzten Antwort stehts wohl fest =)
Michael H. schrieb: > Nach seiner letzten Antwort stehts wohl fest =) Stimmt, aber was gibt es da zu grinsen?
mit welchen Recht behauptest Du meine Meinung?? Ich halte keinen hier für einen Deppen.
Richi schrieb: > mit welchen Recht behauptest Du meine Meinung?? Ich behaupte nur meine, nicht deine.
Klaus Wachtler schrieb: > Stimmt, aber was gibt es da zu grinsen? Zu viel ärgern gibt nur Falten. Hm, zu viel Grisen auch... Ach dann liegts einfach am schönen Wetter. Und bevor der Richi sich denkt, hier seien nur Trolle unterwegs: Mein lieber Mann, wie man in den Wald ruft... Daher nochmal Netiquette: Klare Beschreibung des Problems Vor allem die letzten beiden Punkte.
Michael H. schrieb: > Und bevor der Richi sich denkt, hier seien nur Trolle unterwegs: Hm, wenn meinst du jetzt? Hier sind bsiher drei Leute unterwegs: der TE, Du und ich. Ihn meinst du offenbar nicht, dich vermutlich auch nicht. Mist.
Richi schrieb: > das müsste doch für die minimale Übertragung reichen ?? Radio Eriwan: Im Prinzip ja. Wenn verschiedene Kleinigkeiten gleichzeitig erfüllt sind. Die da wären... 1. Korrekte Programmierung der µC-seitigen Funktionen v24_init und v24_putc. 2. Korrekte Hardware µC-seitig, also im wesentlichen Taktrate, Pegelwandler, Buchse, Kabel zum PC. 3. Korrekte Programmierung PC-seitig, also im wesentlichen die Vorbelegung der Werte, die von Open benutzt werden. Minimal PortName und BaudRate. Statt Read ist bei Länge 1 Readbyte vielleicht logischer. Read/Readbyte können nur funktionieren, wenn das Open erfolgreich war. Der Rückgabewert von Open sollte also ausgewertet werden. 1. und 2. können und sollten unabhängig von 3. geprüft werden. Denn ohne fehlerfreies 1. und 2. kann 3. nicht funktionieren. Wie geprüft werden kann, hat Klaus bereits geschrieben.
Klaus Wachtler schrieb: > Ihn meinst du offenbar nicht, dich vermutlich auch nicht. > Mist. Hehe, eigentlich meinte ich mich schon (auch).
Hallo, ich denke es geht hier mehr um Eitelkeiten, als um die Sache.. sollte eigentlich nicht so sein. Für meine erste Schaltung hatte ich 3 Monate gebraucht, doch jetzt gehts. wenn du es garnicht hinbekommst, kann ich die was zusenden: ich habe einen analogen Wert (ADC)-Wert vom mc nach PC übertragen, die habe ich allerdings mit assembler und Java am PC geschrieben, auf einem Atmega8, wenn dir das hilft? Gruß Pfeiffy
Richi schrieb: > Man braucht für eine Serielleübertragung > > Mikrocontrollerseitig: > > die Bibliothek #include "v24_poll.c" > Variable in Char char _analog; > den Befehl um die Baudrate einzustellen v24_init(9600); > den Befehl um die Variable zu versenden V24_putc(_analog); > > c# seitig: > > serialPort1.Open(); > serialPort1.Read(_analog, 0, 1); > > das müsste doch für die minimale Übertragung reichen ?? Woher soll das jemand wissen außer Dir? Wir kennen Deine "v24_poll.c" doch nicht. Tue einfach mal so, als ob alle hier nicht auf Deine Testplatine und Deine PC-Festplatte gucken könnten. Peter P.S.: Gibs zu, Du willst doch gar keine Antwort auf Deine Frage. Du willst einfach nur wissen, ob bei Dir ein Lauschangriff läuft. Wenn also jemand ohne Informationen antworten kann, dann ist das der Fall.
Richi schrieb: > void initv24 (void) > { > > //UCSRC = 0b10000110; > //UCSRB |= ((1 << TXCIE) | (0 << RXCIE)); > > } Ich grübele schon seit Stunden, wozu diese Funktion gut ist. Es muß doch einen Grund haben, warum Du meinst, sie uns unbedingt zeigen zu müssen. Oder willst Du einfach nur durch überflüssigen Text das Erkennen des Fehlers absichtlich erschweren? Peter
Peter Dannegger schrieb: > Ich grübele schon seit Stunden, wozu diese Funktion gut ist. Selbst schuld! :-)
Peter Dannegger schrieb: > Gibs zu, Du willst doch gar keine Antwort auf Deine Frage. Du willst > einfach nur wissen, ob bei Dir ein Lauschangriff läuft. > Wenn also jemand ohne Informationen antworten kann, dann ist das der > Fall. Wie die beiden Hellseher, die sich auf der Straße treffen: "Dir geht's gut, und wie geht's mir?"
Oh je! nu iss aber gut, ich denke das Problem ist ganz klar definiert, die Kommunikation geht nicht, als Anfänger weiss man hier nicht, wo das Problem liegt und kann es so auch nicht beschreiben. Frage: so wie ich das sehe, willst du nicht auf en PC, sondern auf ein LCD schreiben?
Pfeiffy schrieb: > Oh je! nu iss aber gut, ich denke das Problem ist ganz klar definiert, Totaler Blödsinn! Hier ist rein gar nichts klar definiert. Oder siehst du eine Initialisierung der UART? Siehst du eine Hardwarebeschreibung? Siehst du auch nur eine Zeile zum Versuchaufbau? > die Kommunikation geht nicht, als Anfänger weiss man hier nicht, wo das Das ist billige und ungleich dumme Ausrede! Ein denkender Mensch muss dazu in der Lage sein, ein Problem anderen verständlich machen zu können. Wenn ein 5-jähriger hinfällt, muss er der Mama auch sagen können, wo es wehtut. Eine stumpfe "geht nicht"-Zeile ist keine Problembeschreibung. Hier sind einfach nur Codebatzen ohne nachzudenken hingeworfen worden mit folgendem offensichtlichen Gedanken im Hinterkopf: Ich bin zu faul, da jetzt wirklich drüber nachzudenken, sollen das mal andre machen.
tut mir leid, ich möchte mich hier nicht über die Sinnhaftigkeit einer Aussage unterhalten, 22 Beiträge nur darüber wie jemand eine Frage stellt? Ich denke so könnt Ihr hier niemandem helfen, sondern nur erschrecken. Oft weiss man als Anfänger nichtmal die Frage.
Pfeiffy schrieb: > Oft weiss man als Anfänger nichtmal die Frage. Und genau deshalb gibt es Postingregeln, Netiquette usw., die einen an die Hand nehmen, welche wichtigen Informationen man geben sollte. Es gibt daher nur ein wirkliches Problem für den Anfänger: man muß sie lesen. Wenn ich eine C-Frage stelle, ist es doch wohl selbstverständlich, daß ich zuerst den genauen MC-Typ und den Compiler angebe. Und wenn ich eine nicht-Standard-Lib benutze, gehört die selbstverständlich mit als Anhang dazu. Keiner kann schließlich auf Deine Festplatte gucken. Der Leser sollte alle notwendigen Informationen kriegen, damit der gepostete Code ohne Fehler und Warnungen compilierbar ist. Eine große Unsitte ist daher auch, Variablen ohne Typvereinbarung zu benutzen. Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.