Hi,
habe lange mit mir gehadert ob ich hier was poste oder nicht, aber ich
komme alleine nicht weiter.
Ich betreibe einen Atmega8 in Grundschaltung mit ISP. Daran
angeschlossen eine LED mit Rv und ein UM232H (RX/TX) und wahlweise einen
Quarz mit exakt 12.0 MHz.
Ich programmiere in Bascom (gibts da eigentlich schon ne neuere
version?).
1
Compiler version :1.11.9.8
2
Compiler build :1.11.9.8.001
3
IDE version :1.11.9.8
4
Serial number :Serial DEMO
5
Windows OS :Windows 7 Ultimate
Nun aber mein Proggi:
1
$regfile = "m8def.dat"
2
$framesize = 32
3
$swstack = 32
4
$hwstack = 32
5
$crystal = 1000000 ' 12000000
6
$baud = 9600
7
8
Led1 Alias Portb.0
9
Config Pinb.0 = Output
10
Dim X As Long
11
12
Do
13
Print "X"
14
Toggle Led1
15
Wait 2
16
Loop
Der µC schluckt das Prog auch, die LED blinkt fröhlich, aber am Terminal
am Laptop kommt nur "Mist" an.
Ich habe bereits mehrfach durch Tante Google oder die SuFu hier von
falschen Einstellungen der Fusebits oder der Baudrate gehört/gelesen,
habe das mehrfach kontrolliert. Ohne Erfolg.
Streckenweise erhielt ich über einen anderen Adapter mal klare Zeichen,
die dann aber wieder verschwanden und gegen die o.g. willkührlichen
ASCII-Zeichen ersetzt wurden.
Ich habe es sowohl mit dem internen als auch externen Quarzen versucht,
auch habe ich hier verschiedene verwendet. Ohne Erfolg.
Und ja, ich habe auch schon den 3. µC dran, also einen Defekt schließe
ich damit mal aus.
Die Spannungsversorgung geschieht über ein Labornetzteil welches auf 12V
gestellt ist und einem 78L05. (auch ohne den 78L05 und direkt 5V das
gleiche).
Any ideas?
Danke.
Grüße.
Lars
Lars Witter schrieb:> Ich habe es sowohl mit dem internen als auch externen Quarzen versucht,> auch habe ich hier verschiedene verwendet. Ohne Erfolg.
Das schreibe ich hier bereits. Für den internen Quarz.
Was mir gerade noch einfällt, bei meinen letzten Versuchen konnte ich
die UART-Ausgabe auch bei gesteckten ISP sehen, nun scheint er erst zu
senden wenn ich den ISP abziehe ...
Grüße
Lars
Könnte ein Hardwareproblem des unbekannten Schaltungsaufbaus sein.
Wahrscheinlicher ist es, dass deine ISP-Software den µC nach dem
Programmieren im RESET hält und das µC-Programm erst losläuft, wenn die
ISP-Software nicht mehr am Ruder ist, weil du den Stecker abgezogen
hast.
Den Pegel am Reset-Pin kannst du mit einem Multimeter nachmessen und
dann entscheiden, ob der µC läuft oder nicht.
Wenn du sinnvolle Wartezeiten wählst, kannst du mit der LED und einer
Stoppuhr nachmessen, ob der µC richtig bzw. wie erwartet tickt.
Es gibt nur einen internen RC-Oscillator. Der aber stark Spannung und
Temperaturabhängig ist.
Es ist ja in den letzten Monate immer wärmer geworden !
Das wird der Grund sein. Probiers doch mal mit einer autobaud Funktion.
Da sendet der PC z.B. viele ASCII 'U' in Binär 01010101. Man misst dann
die länge einzelner Bits im verhältnis zum eigenen Zeitnormal (der RC
Oscillator)
und stellt den Baudratendivisor etsprechend. Damit hat man auf den Quarz
im PC Kalibriert. man Könnte jedoch auch den internen RC-Oscillator
verstimmen und nicht das Baudratenregister.
Oder man nimmt einfach einen eigenen Quarz für den AVR.
Nehmen wir an, ich habe den externen Quarz eingeschaltet (12.0 MHz).
Dann entfällt der ganze interne Wärmekrempel und die Kalibirierung.
Es geht aber immer noch nicht.
Was ist eine "autobaud" Funktion?
Ich habe den internen RC-Osszilator auch nur testweise genommen um
Probleme des externen Quarzes auszuschließen. Geplant war den 12MHz zu
nehmen.
Schaltungsaufbau ist simpel: Alle VCCs & GNDs nach der Grundschaltung
aus dem AVR-Tut + ext. Quarz mit 2 x 22pf oder 47pf (habs grad nich im
Kopf) ISP nach Datenblatt (geht ja auch). LED per Rv einen Pin.
Spannungsversorgung ist auch die Grundschaltung des 78L05 2
Kondensatoren und ne Diode.
Hilft das weiter?
Lars Witter schrieb:> Ich habe den internen RC-Osszilator auch nur testweise genommen um> Probleme des externen Quarzes auszuschließen. Geplant war den 12MHz zu> nehmen.
Dann tu das.
Du weißt aber schon, dass du den Quarz mittels der Fusebits aktivieren
musst? Nur weil da ein Quarz drann hängt, heißt das noch lange nicht,
dass der auch benutzt wird.
Karl Heinz Buchegger schrieb:> Du weißt aber schon, dass du den Quarz mittels der Fusebits aktivieren> musst? Nur weil da ein Quarz drann hängt, heißt das noch lange nicht,> dass der auch benutzt wird.
Das habe ich ja getan, soweit ich denke auch richtig.
Den µC hab ich soweit ja einigermaßen im Griff nur mit der UART stehe
ich auf Kriegsfuß.
Diese Einstellung verwende ich mit dem ext. Quarz.
1
$prog &HFF , &HFF , &HC9 , &H00
Und ja, ich habe sie auch in den µC gebruzzelt ...
Ich probiere den UART-Adapter gleich mal an nem anderen Rechner, nicht
das mir mein Rechner nen fiesen Streich spielt.
So, schn***evoll ... habe jetzt nahezu alle Baudraten (manuell) durch,
intern wie extern quarz/rco ... nix :-(
Das er den externen Quarz korrekt erkennt und verwendet merke ich ja
wenn ich ihn rausziehe, hab dann einfach mal nen langsameren eingebaut
und das Blinken wurde deutlich langsamer ... scheinbar alles soweit
korrekt. Die Zeichen am Terminal haben sich für diesen Vorgang auch
verändert.
Trotzdem nur Kauderwelsch auf dem Terminal ... habs auch am zweiten
Rechner getestet.
Grüße
Lars
PS: Jemand unter euch da draußen der im Raum 35037 unterwegs ist?
.. hast du auch das Terminal (welches denn ?) korrekt eingestellt ?
9600 N 8 1 z.B.
die Masse vom Um232 ist auch mit der Atmel Masse verbunden ?
also RX TX GND ?
Gruss k.
Klaus De lisson schrieb:> .. hast du auch das Terminal (welches denn ?) korrekt eingestellt ?> 9600 N 8 1 z.B.
Ja das habe ich wobei die 9600 in meinem Test von 300-250000 ging und
ich das analog im µC auch so eingestellt habe.
> die Masse vom Um232 ist auch mit der Atmel Masse verbunden ?> also RX TX GND ?
Genau diesen Gedanken hatte ich 3 Minuten bevor ich dein Beitrag gesehen
haben. Explizit angeschlossen hatte ich das nicht, ich war davon
ausgegangen, dass der USB-Programmierer das GND des USB mitführt und der
UM232 auch, das somit der Kreis wieder geschlossen ist.
In der App-Note zu dem UM232 ist GND nicht eingezeichnet.
Werde das aber auf jeden Fall heute abend nochmal ausprobieren.
Vielleicht nehme ich auch mal 2 µCs und lasse die sich unterhalten,
vielleicht verstehen die sich ja wenigstens :-)
Lars Witter schrieb:> Werde das aber auf jeden Fall heute abend nochmal ausprobieren.
So gesagt getan und der Krempel läuft ... warum, keine Ahnung.
Ich habe nichts weiter gemacht als Strom auf die Anlage zu geben und
alles ran an den Rechner ... nicht mal der Rechner wurde neu gebootet!
Allerdings kann ich bei dem ext. Quarz von 12MHz nicht höher als 19200
Baud. Danach kommen wieder nur "wirre" Zeichen.
An weniger Temperatur als gestern kann ich nicht glauben, da es heute
deutlich wärmer war als gestern ...
Ich komme wieder auf euch zurück wenn es wieder spinnt, soweit wie jetzt
war ich ja schonmal kurz - allerdings war das nur ein kurzweiliges
Erfolgserlebnis, mal gucken vielleicht hält dieses ja diesmal länger an
:-)
So long
Lars
PS: es lag nicht an GND, das kann ich wahlweise ab- oder dranmachen, das
macht keinen Unterschied.
Lars Witter schrieb:> Allerdings kann ich bei dem ext. Quarz von 12MHz nicht höher als 19200> Baud. Danach kommen wieder nur "wirre" Zeichen.
38400 wird schlecht gehen, allerdings sollte 57600 wieder Okay sein.
115200 geht dann wieder nicht nehme ich an.
I nBascom gibt es einen Button mit dem Namen "Show Result" (CTRL+W)
da kommt ein Report heraus der zeigt dir auch den "Baud Error"
Gruss Klaus
Lars Witter schrieb:> Allerdings kann ich bei dem ext. Quarz von 12MHz nicht höher als 19200> Baud. Danach kommen wieder nur "wirre" Zeichen.
Ja, irgendwann wird der Fehler zu groß, digital kann man nur ganzzahlig
teilen.
Warum nimmst Du nicht einfach nen Standardquarz?
Z.B. 11,0592 oder 14,7456MHz.
Peter
Weil der grad hier rumlag :-)
werde bei nächster gelegenheit welche mitbestellen.
Hat jemand nen kurzen Bascom-Schnipsel für die Empfangsgeschichte, mein
Code mag nicht - hier mein Versuch leicht gekürzt - d.h. er geht nie in
die IF-Abfrage.
Lars Witter schrieb:> Code mag nicht - hier mein Versuch leicht gekürzt - d.h. er geht nie in> die IF-Abfrage.
Wie wärs, wenn du dir zu Kontrollzwecken einfach mal das empfangene Byte
gleich wieder zurück schickst. Dann siehst du auch gleich am Terminal,
ob die Übertragung geklappt hat
1
Onrxd:
2
Uart_rx = Udr
3
Udr = Uart_rx
4
Return
> Select Case Uart_rx> Case 76> 'Das ist der ASCII Code für L
kann man das in BASCOM nicht so (oder so ähnlich) schreiben?
case 'L'
erstens brauchst du dir dann nicht die ASCII Codes raussuchen. Zweitens
ist dann auch klar, dass du wirklich ein großes L meinst und nicht etwa
ein kleines l und drittens ist jede Code-Änderung, die einen Kommentar
überflüssig macht, immer eine gute Änderung
Hab mir jetzt erstmal 14,x Baudquarze bestellt und erhalten und verbaut.
Nun klappts auch mit dem Nachbarn bei 115200. Suppi.
Wenn ich jetzt den UM232H unter meinem Arm-Linux mit Kernel 2.6.30 zum
Laufen kriegen würde ... compilieren der 32er/64er Sourcen von ftdi
natürlich nicht möglich ...
Lesen habe ich noch nicht umgesetzt da ich gerade an einem Display
"fest-hänge".
Das Teil habe ich bei CSD geordert (32-1602-1 / DEM16216SGH/V) und will
irgendwie die Zeichen nicht richtig darstellen. Entweder bekomme ich
Müll oder ich erhalte z.B. statt einem Lcd "R" ein "X" auf dm Display.
Wobei man nicht generell sagen kann, dass die Ascii-Differenz 1:1 auf
andere Buchstaben übertragbar ist. Habe so den Eindruck das jeder
Buchstabe 1,2 richtig sind und dann 3,4 falsch, 5 & 6 wieder richtung
uws.
Habe das Teil mit 4-bit angeschlossen und mehrfach überprüft und bei der
Lcd-Config die Pins auch so angegeben.
Was auch komisch ist, angeblich ist es ein 16x2 Display, beim Kontrast
einstellen erscheint aber nur die obere Zeile mit den bekannten dunklen
Rechtecken, die untere bleibt Stumm, man kann dort auch keinen Text
ausgeben.
Hier mal mein Code:
Habe wegen des 16*2/16*1-Problems CSD schon angeschrieben mal gucken was
die sagen. Auf der Rückseite (U1 & U2) sind zwei dicke schwarze Punkte
was mich nach meinen Recherchen eingentlich dazubringt das es zwei
Zeihlen haben sollte. Vielleicht muss man ja noch nen Jumper
zusammmenlöten ;-) davon steht aber nirgeds was ...
so long & n8
Lars
Lars Witter schrieb:> Auf der Rückseite (U1 & U2) sind zwei dicke schwarze Punkte> was mich nach meinen Recherchen eingentlich dazubringt das es zwei> Zeihlen haben sollte.
Das hat nix zu sagen, habe hier ein 2x16 mit einem dicken schwarzen
Punkt (Displaytech 162)
So, habe nochmals meine Schaltung geprüft und neu aufgebaut, wenn ich
jetzt EINZELN "L" "A" "R" "S" auf das LCD ausgebe, erhalte ich "FAXY"
als Anzeige.
Gebe ich "LARS" als Ganzes aus erhalte ich wieder "FAXY" gebe ich
hingegen "lars" aus erhalte ich 4 Sonderzeichen.
Any ideas?
PS: in dem Datenblatt steht versteckt was von "Be sure the ST7066U is
not in busy state" das läßt mich widerum vermuten das es sich um einen
ST7066U-Controller handelt. Leider findet sich allerlei vieles im I-Net,
aber nix brauchbares gerade in Bezug auf Bascom.
PPS: Gebe ich "FAXY" aus, erscheint "LARS" ;-)
PPPS: Und ich kann nur die erste Zeile beschreiben. Bei der zweiten
weigert er sich beharrlich.
Lars Witter schrieb:>> PPS: Gebe ich "FAXY" aus, erscheint "LARS" ;-)
Hinweis datauf, dass du 2 Datenleitungen irrtümlich vertauscht hast.
Edit:
Das Bitmuster für L ist 0x4C also 0b01001100
F 0x46 0b01000110
A 0x41 0b01000001
X 0x58 0b01011000
R 0x52 0b01010010
da zeichnet sich doch schon was ab. Vertauscht man Die 0x08 Spalte mit
der 0x02 Spalte, dann kommen jeweils die anderen Buchstaben raus.
Noch ein Test, Y und S
Y hat 0x59 also 0101 1001
S hat 0x53 also 0101 0011
scheint zu stimmen. Entweder ein Fehler in den BASCOM Routinen oder ein
Verdrahtungsfehler. BASCOM ist eher unwahrscheinlich, also bleibt nur
noch ...
Klaus De lisson schrieb:> Hallo Lars,> versuch mal den hier:>> /code> ************************************> Config Serialin = Buffered , Size = 20 , Bytematch = 13>> Dim Serinpstr As String * 20> Dim Seroutstr As String * 20> Dim Cr_received As Bit> Dim Strsize As Byte>> enable interrupts>> do>> if cr_received = 1 then gosub parser 'wenn return empfangen wurde>> loop> end>>> Parser:> Input Serinpstr Noecho> While Asc(serinpstr) = 10> Strsize = Len(serinpstr) - 1> Serinpstr = Right(serinpstr , Strsize)> Wend> Seroutstr = "got " + Serinpstr> Print Seroutstr> Cr_received = 0> return>>> Serial0charmatch:> Cr_received = 1>> Return> ****************************************>> Gruss Klaus
Sag mal Meister Lars,
hast du denn wenigstens mal den von mir, extra für dich geposteten
Code ausprobiert ? .. oder erschien es dir zu kompliziert ?
... oder war es zu uninteressant ?
Also , also .. ich muss mich aber wundern.
Gruss Klaus
Lars Witter schrieb:> Allerdings kann ich bei dem ext. Quarz von 12MHz nicht höher als 19200> Baud. Danach kommen wieder nur "wirre" Zeichen.
Im Datenblatt (und hier im AVR-Tutorial) stehen übrigens auch Formeln
mit denen man die Baudrate-Einstellungen berechnen kann. Einfach
ausprobieren bis es mal zufällig Funktioniert ist wenig sinnvoll...
Wenn du an der PC-Seite einen FTDI verwendest, der kann auch "krumm"
Baudraten. Es ist also nicht zwingend die Standardwerte zu verwenden.
Gruß
So, erstmal Dank an die ganzen Antworter hier, super!
@Klaus: Jein, deinen Code habe ich die Nacht getestet, zuerst mit für
mich mäßigem Erfolg. Könnte aber auch an der Linux-Seite gelegen haben.
Ich habe mich durch diverse Beispiele gewühlt nun gehts. Dein Code ist
nahezu der von mir verwendete. Evtl. muss ich bei mir das Input ...
Noecho noch aus dem Serial0 rausnehmen.
@Sebastian: richtig, trotzdem schien da was zu klemmen, hab nun nen
Baud-Quarz dran und alles läuft prima mit 115200. Mehr brauche ich
soweit auch gar nicht.
@Karl: "merkt er was?" ja merke ich, nur das problem ist, das nicht
meine Verdrahtung ne Macke hatte sondern das Display.
Sorry wenn ich nicht schnell genug auf alle Posts geantwortet habe,
hatte aber noch so meine liebe Not den UM232H an mein Sheevaplug zu
kriegen.
Dies hat sich ja nun auch Dank eines kompilier- und
experimentierfreudigen Kumpels auch erledigt.
Nin gehts ans Eingemachte, seit gestern abend/nascht (3:30 Uhr gähn)
"unterhalten" sich der Sheeva/Debian und der Atmega8 miteinander und der
letztere zeigt mir das Gesendete auch aufm LCD an.
Grüße & Danke
Lars
PS: Ich werde wiederkommen mit neuen Fragen :-))
Die nächsten Projekte sind schon in Sicht:
- Temp mit Dallas 1812
- RTC mit DS1307
- der SHT11 wartet auch noch
- zudem noch wilde tests mit ntc/ptc und nem irgendwas Feuchtesensor
- PWM-Signal auf Schieberegister
Bleiben wir gespannt liebe Leser, jeder hat mal klein angefangen, die
ersten Laufschuhe passen schonmal.
Hi Lars,
insgesamt klingt es do okay ... aber
du hättest dich doch gewundert wenn es kein "ABER" gäbe .. oder ?
Lass am besten gleich die Sache mit DS1307 fallen
und nimm was vernünftiges wie DS3232SN# .
Dann hast du gleich den Murks mit dem "Zeit nachstellen" auf
der Vergessliste
Gruss Klaus
Klaus De lisson schrieb:> du hättest dich doch gewundert wenn es kein "ABER" gäbe .. oder ?
nö ;-)
> Lass am besten gleich die Sache mit DS1307 fallen
Schade habe 2 Stk. hier rumliegen.
> Dann hast du gleich den Murks mit dem "Zeit nachstellen" ...
Wo genau liegt denn das Übel? Edit: Gerade aufschlußreiche Artikel
gefunden. Frage vorerst hinfällig.
Ich wollte nen DCF77 abfragen und die Zeit "nur" zwischenspeichern.
Solange der Sheeva* rennt wollte ich die Zeit mit dem Abgleichen (der
macht NTP) und dann nur für die Sheeva-Downtime dann den RTC verwenden.
Die Zeit sollte nur dazu dienen Speichervorgänge bzw. Datenübertragungen
zeitlich zu koppeln bzw. zu ergänzen.
Grüße
Lars
* Stellvertretend für Sheeva, Dockstar, PC & Co.