Hallo, ich habe ein ATMega8535. An die serielle Schnittstelle (Rxd) soll nun ein Modul welches ein Signal mit 300bps, 7 Datenbits, 2 Stoppbits und 1 geradem Paritätsbit aussendet. Und zwar 15 Bytes und anschließend ein CR. Nun soll ein String 15 Bytes groß die Daten aufnehmen und bei jeder neuen Übertragung aktualisiert werden. Zur Kontrolle hab ich ne Verbindung zum PC wo der String hingesendet wird. Aber da kommt nix an. Hardware müsste eigentlich stimmen. Hab sie nicht nur einmal kontrolliert. Achso wenn der µC ständig einen Text ausgeben soll (im Programm festgelegt) klappt das wunderbar. Kann mir jemand helfen. Ich hab das jetzt in Bascom probiert, da ich eigentlich nur Basic kann.
wie ist das nu, soll der avr senden oder empfangen? wenn ich's recht verstanden hab, sendet das modul und der avr lauscht. ... aber da kommt nix an... (am PC?, der 'mithört') stellt sich die frage, sendet das modul überhaupt? der pin RX ist der empfänger (receive) der TX der sender (transmitter) wer soll denn nu was machen? weil, funzen tut die serielle schnittstelle problemlos. noch was, ticken die auf ttl-pegel oder hast du 'nen schnittstellenbaustein dazwischen, sowas wie max232? die avr-schnittstelle arbeitet nämlich invertiert, vielleicht liegt ja hier der hund begraben. fröhliches arbeiten noch, gruss, harry
Also soweit hast du das schon verstanden. So hab ichs jetzt aufgebaut ______ ___ ____________ ________ ___ | | | | | | | | | | | Modul | -> | 1 | -> | ATMEGA8535 | -> O| MAX232 | -> | PC | |_______| |___| |____________| |________| |____| So das is das Datenblatt von dem DCF-Modul: http://www.hkw-elektronik.de/pdf/fmd01001_sd.pdf Der PC soll später wieder ab. Das Modul sendet auch. Hab ich mal direkt an MAX232 gehängt und dann stimmt auf dem Bildschirm alles. Mein Problem ist eigentlich das im Bascom das SoftwareUART nix annimmt. Andere Sachen wie im Tutorial hier (www.rowalt.de) gehen auch alle.
naja, vor'm pc hängt ja auch der max232, der invertiert das signal und bietet's allem weitern 'mundgerecht' an. wenn das modul serielle daten ausgibt (und die nicht invertiert) kriegt sie der avr falsch - musste invertieren, am einfachsten mit bc546. wenn das modul die daten invertiert ausgibt und der avr invertiert empfangen kann (kanner), dann ist der code nicht richtig. haste mal vom pc daten an den avr geschickt? kann der avr vom pc empfangen? mal versuchen. nettes stricken noch, gruss, harry
Das Problem ist nur mit dem der onrxd Routine klappt das mit PC zum µC und zurück. Mit dem SotwareUART oder HardwareUART Programm von Bascom klappt garnix. Ich denk immernoch das es ein Softwareproblem ist. Vom Modul konnte er mit der onrxd Routine nix vernünftiges empfangen, da das Modul so kommische Übertragungswerte hat (7 Datenbits, 1 Pariätsbit und 2 Stoppbits). Ich weiß aber nicht wie ich das im µC ändern kann.
wenn du sogar selber denkst, dass es ein softwareproblem ist, warum postest du dann nicht endlich mal den programmcode???
Hast ja recht... Also der hier geht wenn ich vom PC aus sende Ich schätze mal das das Modul nicht geht weil die zwei Stoppbits nich eingetragen sind. Ich weiß auch nich wie ----------------------------------------------------------------- $Regfile = "m8535".dat 'ATMEGA8535-Deklarationen $Crystal = 1000000 'Quarz: 3.6864 MHz $Baudrate = 300 'Baudrate der UART: 9600 Baud Dim i As Byte Do If USR.RXC = 1 Then 'Wenn Byte empfangen... i = UDR 'Byte aus UART auslesen Print i Loop End ----------------------------------------------------------------- Und diese Quellcodes sind die Originalcodes von Bascom. Und die gehen überhaupt nicht. Auch nicht Rechner -> µC. Harware UART ----------------------------------------------------------------- $crystal = 1000000 $baud = 300 'first compile and run this program with the line below remarked Config Serialin = Buffered , Size = 20 'dim a variable Dim Name As String * 16 'the enabling of interrupts is not needed for the normal serial mode 'So the line below must be remarked to for the first test Enable Interrupts Print "Start" Do 'get a char from the UART Name = Inkey() If Err = 0 Then 'was there a char? Print Name 'print it End If Wait 1 'wait 1 second Loop ------------------------------------------------------------------ Und das Software UART ------------------------------------------------------------------ $crystal = 1000000 'tell the compiler which chip we use $regfile = "m8535.dat" 'some variables we will use Dim S As String * 10 Dim Mybaud As Long 'when you pass the baud rate with a variable, make sure you dimesion it as a LONG Mybaud = 300 Do 'first get some data Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 2 'now send it Serout S , 0 , D , 1 , Mybaud , 0 , 8 , 2 ' ^ 1 stop bit ' ^---- 8 data bits ' ^------ even parity (0=N, 1 = E, 2=O) ' ^-------------- baud rate ' ^-------------------- pin number ' ^----------------------- port so PORTA.0 and PORTA.1 are used ' ^--------------------------- for strings pass 0 ' ^-------------------------------- variable ' Wait 1 Loop End --------------------------------------------------------------------- So ich hoffe das ihr mir jetzt vielleicht weiterhelfen könnt. Ich dank euch schonmal für eure Hilfe
Zumindest der Software UART sollte funktionieren wenn die Parameter richtig eingestellt sind. >>300bps, 7 Datenbits, 2 Stoppbits und 1 >>geradem Paritätsbit aussendet Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 2 ist definitiv nicht richtig. Parität, Anzahl Stoppbits und Anzahl Datenbits stimmen nicht. Für den Hardware-Uart werden wohl einige Bits in den Steuerregister manuell engestellt wer´den müssen (steht im Datenblatt). Gruss Bernd
Warum nicht ich kann doch das Paritätsbit mit als Datenbit verkaufen. Habs nochmal probiert. Funzt auch nicht.
Im Prinzip ist das Paritybit auch nur ein Datenbit. Wenn ich das Modul richtig verstehe sendet es nur Daten auf Anforderung. Enweder durch Befehl (irgendwas und CR) oder durch Pegel auf der RXD-Leitung am Modul. Bernd
Das sendet. Steht unter vereinfachtem Datenaustausch im Datenblatt (siehe Link). Ich hab die Rs232 in Leitung nämlich auf GND gezogen. Das sendet sieht man auch mit nem Oszi.
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.