Servus Leutz, also da ihr mir hier schon so gut wegen dem Display helfen konnten, stell ich wieder ne Frage... Und zwar wegen dem UART meines ATMEGA16. Normalerweise sollte doch Bascomtechnisch mit dem Code alles Paletti sein, aber er hat nur konstant 5 V an RX und an TX... ------------------------------------------------- $crystal = 14745600 $regfile = "m16def.dat" $baud = 2400 Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.3 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.5 , Rs = Porta.6 Config Lcdbus = 4 Initlcd Wait 1 Cls Upperline Lcd "LCD Aktiv" Wait 1 Lowerline Lcd "Initialisiere Com" Open "comd.1:2400,8,n,1" For Output As #1 Wait 1 Thirdline Lcd "Comport geoeffnet" Dim I As Integer I = 0 Do Print #1 , "HALLO" Wait 1 Cls Upperline Lcd "Hallo gesendet" Lowerline Lcd I Wait 1 I = I + 1 Loop Until I = 32768 Close #1 --------------------------------------------------------------- Gemessen hab ich das ganze mit einem Oszi auch schon. Es kommen wirklich nur konstant 5 V sobald der MC ein ist. Den Befehl: Config Serialout = Buffered , Size = 20 hatte ich auch schon drin. Keine Änderung. Muss an den Fusebits (meine Freunde :-( ) noch was umgestellt werden um den UART Freizuschalten oder habt ihr noch ideen wo der Hasse im Pfeffer sein soll. Im Anhang hab ich mal nochmal meinen Schaltplan rein. Das ganze soll dann über einen Step-Up/-Down Regler mit meinem Bluetoothmodul arbeiten. Momentan ist das Ding noch nicht drin, sondern ein MAX3232 dran der 100% Richtig beschalten ist, da ich mein BT-Modul schon umprogrammieren konnte. Wenn einer von den Bascomspezialisten mal kurz über den Code kucken könnte wäre Klasse, denn dann weis ich das schon mal daran nicht liegen kann. MfG und noch schönen Feiertag aus der mittlerweilen nicht mehr sonnigen Oberpfalz Matthias
Hau mal die Zeile: Open "comd.1:2400,8,n,1" For Output As #1 und den hier: Print #1 , "HALLO" auch komplett raus. Stattdessen :Print "Hallo" Die brauchst Du nur, wenn Du einen Software UART benutzt. Wenn der MAX232 an der "richtigen" seriellen Schnittstelle sitzt, wird automatisch Com1 geöffnet. MfG Paul
Ach so: Mit DEM Quarz kommst Du mit der Baudrate nicht hin. Stelle mal 9600 Baud ein. MfG Paul
Hi @Paul: Die Aussage solltest du mal begründen! MfG Spess
Welche Aussage davon? Die mit dem Quarz? Gut: Die Formel dafür ist: UBRR=(Quarzfrequenz/(16*Baudrate)-1 Das ergäbe dann 383 für UBRR. Das passt aber nicht in das Register rein. MfG Paul
Paul Baumann wrote: > Welche Aussage davon? Die mit dem Quarz? > > Gut: Die Formel dafür ist: > > UBRR=(Quarzfrequenz/(16*Baudrate)-1 > > Das ergäbe dann 383 für UBRR. Das passt aber nicht in das Register rein. > Seit wann ist das UBRR für einen Mega16 nur 8 Bit breit?
Hallo Paul, das ohne extra Anweisung unter Bascom immer der Com1 verwendet wird ist richtig, jedoch bezieht sich das nicht nur auf Softwareerstelle Com-Ports. Der Mega2560 hat z.B. 4 * RS232 in Hardware und man muß jeden Port egal ober er in Soft oder Hardware realisiert wird mittels des Com-Befehls initialisieren. Ausnahme ist hier auch wieder Port1, das macht der Compiler selbst, voraussetzung es ist ein Hardware USART. :D Roland
@Karl-Heinz Stimmt! Es gibt ja UBRR H und UBRR L ....vielleicht sollte man doch mehr in Assembler zu Werke gehen. Paul (alter Schussel) ;-)
@Roland ...auch das stimmt, aber er hat doch "nur" einen ATmega16. Paul (Kamera-geschädigt)
So ich denke ich habe den Fehler im Code gefunden. Open "comd.1:2400,8,n,1" For Output As #1 <-- Falsch, absolut nur für Software-UART! mit comd.1 sagst du dem Compiler daß du einen Software-Uart haben willst der am Port D.1 hängt, das ist dann der Ausgangspin. Schau mal in den Bascom-Samples im Ordner unter "Chips" m2560.bas Da ist beschrieben wie du den Hardware-Uart öffnest, aber sicherheitshalber hier noch das ganze in Kürze. UART konfigurieren: Config Com1 = 2400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Dann die Schnittstelle Öffnen: Open "COM1:" For Binary As #1 und jetzt kannst du anfangen Daten hin und her zu schubsen. Da der Compiler das aber beim 1. Hardware-Uart selbst macht und du ihm schon mit dem $baud-Statement die Geschwindigkeit mitgeteilt hast kannst du dir das sparen. Das ganze brauchst du nur wenn du entweder einen Software-Uart machst oder in Hard oder Software einen anderen Comport als den 1. verwendest. MfG Roland :D
Servus Leute, nach dem Code von Roland gehts einwandfrei. Die Datei m2560.bas ist net mit dabei. Also zusammenfassend kann man sagen: Open "comd.1:2400,8,n,1" For Output As #1 ist für Software UART auf irgend einen Pin Und: Config Com1 = 2400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 ist für den Hardware UART. Alles klar. Danke euch Leute. Langsam frag ich mich wie die 8051 damals liefen, denn viel Quellcode klau ich aus den damaligen Projekt und bastl mirs aus der Hilfe zusammen. Naja aller Anfang ist schwer. Ich sehs schon. Wenn der Mist vll irgendwann mal fertig ist, kann ich ja mal den Schaltplan und den Quellcode ins Forum stellen für andere Anfänger. MfG Matthias
Nachtrag. Und als Input würds dann auch so laufen oder? Sprich er müsste jetzt schon mit z.B. Waitkey auf eine Eingabe am RX warten oder? MfG Matthias
Hallo Matthias, ja der uC wartet wenn du den Waitkey-Befehl benutzt auf ein Zeichen das über die Serielle reingerauscht kommt. Hast du die Originalversion von Bascom direkt von MCSelec oder von einem Händler ohne Updateberechtigung? Wenn du ein Update machst wird die fehlende Datei vom Updater erstellt die ist dann sicherlich dabei. In Software müßtest du noch einen Input-Pin definieren, aber wirklich nur wenn du nen Software-UART nimmst. MfG Roland
Alles klar Roland. Bascom...lass mich überlegen...war von nem Händler ausm Konkursverkauf. Ob da ne Updateberechtigung dabei ist...muss mal in den Unterlagen kramen. Dank dir. MfG Matthias
Hallo Matthias, mach doch mal folgendes. Geh in den Programmordner von Bascom und suche dort die Daten "UpdateWiz.exe" die startest du mal per doppelklick, der rest erklärt sich von selbst. Wenn das Update klappt (Geduldig sein daß kann je nach Datenmenge schon mal 15min dauern bis alles installiert ist) ist alles klar. Wenn nicht, Mail mir mal ich kann dir dann die aktualisierten dateien (aber ohne Lizenzfile) schicken. Das ist laut MCSelec kein lizenzbruch, nur meine Lizenzdatei schick ich natürlich nicht mit, du hast ja eines sonst würde Bascom nicht laufen. :) MfG Roland
Am einfachsten wäre es wie schon geschrieben den open-Kram komplett rauszunehmen. Eine Baud oder $BAUD-Anweisung im Header und dann nur noch Print ohne alles, das ist beim Hardware-UART das einfachste. Aber ich hätte noch eine kleine Frage zu deiner Schaltung. So wie ich deinen Schaltplan verstehe erzeugst du einen Reset durch Kurzschluss :-). Da fehlt irgendwie der Kollektorwiderstand. Und im allgemeinen kannst du die Resetlogik einfacher machen indem du den Resetpin z.B. mit einen 100nF C gegen Masse und einen 47k Widerstand gegen 5V legst. Das spart Bauteile und Kosten. Das gleiche gilt für die Ankopplung deines BT-Moduls. Da kannst du TXD des Moduls direkt auf den Atmel legen, der Atmel erkennt die Pegel. Und der RXD des Moduls kannst du über Widerstände oder Zenerdiode realisieren. Schau mal hier im Forum nach dem Anschluss von SD/MMC-Karten. Das ist das beschrieben. Das vereinfacht die Sache noch mehr. Und um den UART für andere Sachen freizuhaben kannst du den SPI-Bus nutzen, Der ist auch deutlich schneller. mfg. Joachim
@ Joachim R., du hast recht, der Reset wird durch nen "harten" Kurzschluß erzeugt. Je nach Leistung die die Stromquelle bringt macht das der Transistor nicht wirklich lange und dann gibts Rauch. :) Ich würde allerdings als Pull-Up an den Reset nicht wie du schriebst 47K nehmen sondern lieber 10K. Die meisten Progger haben damit keine Probleme beim "runterziehen" des Reset-Pins, es macht aber die Schaltung um einiges Stabiler... :) Mit der Anbindung des BT-Moduls mittels Spannungsteiler als "Levelshifter" ist etwas vorsicht geboten, je nach auslegung der Widerstände und somit fließendem Strom kann es sein daß du den Pegel des BT-Moduls "hochziehst". Ein Linearregler kann spannung nur sourcen und nicht sinken, das kann das Modul je nachdem wie empfindlich die Eingänge mit den Dioden nach VCC sind unter Umständen zerstören. (Kann, muß aber nicht!) Weiterhin wird durch die Widerstand-Geschichte die Datenrate nach oben hin begrenzt (ok sollte bei dieser Schaltung nicht so das Problem sein). Wenn es sauber sein soll, nimm nen Levelshifter, wenn ich mich recht erinnere kann man gut ein Gatter der LVX-Serie dafür mißbrauchen. :) Schau mal in der Artikelsammlung da steht was drin, sonst such ich dir das raus. Ich hatte schon mal ein ähnliches Problem, einen Mega32 mit einem riesen Dataflash das 3,3V braucht verbinden, eventuell kann ich dir den Schaltplan raussuchen dort ist das genauer beschrieben. :D Roland
Servus, das mit dem Reset hab ich schon gesehen...ist aber ein 10k drin. Also raucht nix. Das mit dem Step Regler funktioniert bis 115kbaud einwandfrei. Und ich wollt sicher gehen das eben nix raucht, vorallem dem BT- Modul trau ich nicht so ganz da nichts im Datenblatt steht wieviel er verträgt. HardwareUart läuft etz wie geschmiert, dafür hab ich noch Probleme mit den Digitalen IO Pins...da ist wo der Wurm drin. MfG Matthias
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.