PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : hilfe mit serin serput open und so weiter



raptor_79
14.12.2005, 21:48
hallo.

kann mir mal jemand ein funktionierendes beispiel für serin und serout geben?
bzw. eines mit open??

ich habe einen atmega32 und einen atmega8 verbastelt.
aber ich bekomm das ganze nicht dazu was zu senden/empfangen/senden.

kann mir jemand mal sagen, wie das aussehen loss, wenn ich hexvariablen in strings umwandeln will??
habe es mit str(var)
versucht, aber nix. bzw. mit hexval(str)

wie sieht die hardware aus? hab auch schon mit pegelwandlern was versucht. nix!
wie macht ihr das??

gibt es portpins, die man NICHT verwenden darf?

also, wer sowas schon mal gemacht hat, bitte bitte mir mal helfen. ich komm einfach nicht weiter.

Ratber
15.12.2005, 22:19
hallo.

Hallo



kann mir mal jemand ein funktionierendes beispiel für serin und serout geben?
bzw. eines mit open??

Siehue Handbuch,Hilfe und Beispieldateien.
Da ist alles sehr schön demonstriet.



kann mir jemand mal sagen, wie das aussehen loss, wenn ich hexvariablen in strings umwandeln will??
habe es mit str(var)
versucht, aber nix. bzw. mit hexval(str)

Ich weiß nicht genau was du meinst.

Mit Str() wandelst du eine Variable in einen String.



Dim S as String
Dim A as Byte
A=123
S = Str(A)

Der String S enthält jetzt "123"


Mit VAL läuft es genau andersrum.
Aus dem String "123" wird 123 als Variablenwert.



Mit HEXVAL wandelst du einen Stringinhalt iin gleicherweise als Hex ind einen Wert um.



Dim S as String (2) '2 Stellen wenn mehr dann entsprechend definieren
Dim A as Byte
S="7b"
A = Hexval(s)

A enthält jetzt den Wert 123


Mit HEX läuft es andersrum.
Aus dem String "7b" wird der Wert 123



Und da aller guten dinge drei sind:

Mit Bin und Binval ist es genauso.


Das ganze steht aber übrigens auch in der Hilfe.
Sogar mit Beispielcode.




wie sieht die hardware aus? hab auch schon mit pegelwandlern was versucht. nix!
wie macht ihr das??

Nun,Bewuem und Komfortabel mit einem Max232 den es in vielen Varianten gibt.
Alternativ und nicht mehr ganz so korrekt gehts auch mit je eineme Transistor nebst Widerständen für RX und TX .
Die Schaltung dafür findet sich sicher im Wiki.



gibt es portpins, die man NICHT verwenden darf?

Daa hängt vom verwendeten Controller ab.
Im Grunde kann man alle verwenden ausser VCC,GND und Reset wenn das die einzige Funktion des Ports ist.
Steht alles im Datenblatt.
Bei den Megas mit aktivem Jtag gibt es auch einige Einschränkungen.




Fertig

raptor_79
15.12.2005, 23:14
also...
danke erst mal.

zur info.
ich hab das buch: Bascom-avr sprachbefehle... und die hilfe kenn ich.
dann hab ich noch diverse bücher über avr.
aber es geht nicht.

wegen string..... dachte da eher an sowas wie $variable0
oder sowas..
weil, ich hab was von "0-terminated-strings" gelesen, die mit einer "0" abgteschlossen werden. habe zwar schon mit strings gearbeitet.
aber halt auch nur so:
Dim var as string * 10
oder sowas.
oder ich kenn halt den befehl/die befehle, die du oben auch geschrieben hast.

kann ich den rxd an den txd direkt dran hängen??

oder habt ihr da einen pegelwandler dazwischen?

Ratber
15.12.2005, 23:22
wegen string..... dachte da eher an sowas wie $variable0
oder sowas..
weil, ich hab was von "0-terminated-strings" gelesen, die mit einer "0" abgteschlossen werden. habe zwar schon mit strings gearbeitet.
aber halt auch nur so:
Dim var as string * 10
oder sowas.
oder ich kenn halt den befehl/die befehle, die du oben auch geschrieben hast.

Sorry aber das mußte mir jetzt mal übersetzen.
Das liest sich wie Suaheli



kann ich den rxd an den txd direkt dran hängen??

oder habt ihr da einen pegelwandler dazwischen?

Hab ich doch schon beantwortet.
Entweder MAX232 oder für jede Richtung Zwei Transen.
Klick mich (http://wiki.atrox.at/index.php/RS232_Transistor_Modul)


Direkte Verbindung (Ohne alles) von Controller und Serielle am PC ist absolut Verboten.

Marco78
15.12.2005, 23:29
https://www.roboternetz.de/phpBB2/viewtopic.php?t=14925

Ich glaube, mehr muss ich nicht sagen...

Falls doch: "Reicht die Frage nicht einmal??????????

raptor_79
15.12.2005, 23:39
nein. ich will 2 avr´s verbinden.

daran scheitert es.

also:
ich hab was über string gelesen. folgendes:
strings werden durch ascii-null abgeschlossen (0-terminated string), weshalb sie ein zusätzliches byte beanspruchen.

und die befehle, die du beschrieben hast, wende ich ja genauso an.
also: dim [variable] as string * 10 (oder so)

und das: variable=srg(variable)
ist auch klar.. und alles andere eigentlich auch. dachte nur, ich mach was falsch.

raptor_79
15.12.2005, 23:41
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=14925

Ich glaube, mehr muss ich nicht sagen...

Falls doch: "Reicht die Frage nicht einmal??????????

habe keine antwort erhalten, und dachte darum, daß ich sie nochmal stelle. weil=> wurde überlesen.. oder sonst was.

und was brauchbares war/ist nicht dabei.

außerdem habe ich es auch mit open und so versucht.. (siehe oben), und es geht auch nix.

Ratber
15.12.2005, 23:45
nein. ich will 2 avr´s verbinden.

Hätteste gleich sagen können.

Ja geht direkt.


Zu strings:

Die AVR's übertragen Zeichenweise.
Was du als Start oder Stoppzeichen nimmst ist dir überlassen.
Kannst dir also selber ein Protokoll zusammenstricken.

raptor_79
15.12.2005, 23:47
das mit den 2 avr´s steht oben.

kannst mir das mal näher erklären? wie ist das mit start stopzeichen gemeint??

Ratber
16.12.2005, 04:22
ich habe einen atmega32 und einen atmega8 verbastelt.
aber ich bekomm das ganze nicht dazu was zu senden/empfangen/senden.

Ja,das kann man auch so werten das du beide Modelle hintereinander versucht hast.
Eione Genauere Beschreibung dees Problems hätte das Missverständnnis vermieden. :wink:

Interessant wäre noch welche Baudraten du verwendet hast und mit welchen Takten du deine Controller betreibst.(Intern,Extern,Quarz,Schwinger......etc)




kannst mir das mal näher erklären? wie ist das mit start stopzeichen gemeint??

Ich kann das nur wiederholen und neu formulieren.
Du willst in die Übertragung ein Protokoll einführen ("0" als Ende der Übertragung)
Das mußte schon selber machen denn der AVR überträgt einfach nur ein Zeichen bzw. eine Zeichenkette egal was drinn steht.

Das ist kein Windows hier und der AVR hat kein Terminalprogramm eingebaut.
Auch ist Bascom kein VB6.

Wie ich schon sagte,schau dir die Beispiele an,probier sie dann verstehst du auch wie es funktioniert und wo die Unterschiede sind.
ebenso was ein Hardware-Uart und eine Softwareemulation für Praktische Unterschiede haben

Fertige Universalroutinen kann ich dir nicht liefern da jede auf ihren Verwendungszweck zugeschnitten ist.

Die Nötigen Befehle sind Input,Print,Inkey,Serin/Out,Open,Close .......usw.
Aber auf die stößt du ja eh automatisch in der Befehlsreferenz der Hilfe bzw. dem Handbuch.

Ach ja,hier ein funktionierndes Beispiel:

raptor_79
16.12.2005, 17:47
danke, is ja nett gemeint. aber die hab ich auch. und das geht nicht.
hast die selber mal ausprobiert?? vor allem, wie soll das überhaupt laufen?
ich mein, ich habe 2 MC´s.

Ratber
16.12.2005, 17:54
Sicher hab ich die schon probiert.
Ja einwenig anpassen mußte die schon.
Die Routine ist für MC->PC vorgesehen wo einfach alles was ihm geschickt wird zurückkommt.

Für den einen Controller nur Serout und für den anderen nur Serin.
Beim Sendenden gibst du dem String nen Text oder läst ne Variable zählen.
ganz einfach

raptor_79
16.12.2005, 20:37
hast du die signale des senders verstärkt? werde das jetzt dann mal machen.

Ratber
16.12.2005, 20:47
Nö,für wenige Zentimeter ist nix zu verstzärken.
Bei etwas größeren Distanzen wäre es aber Sinvoll beiden Controllern jeweils nen MAX232 zu gönnen.


Fang doch einfach mal im Sicheren Modus an.
runter auf 600 Baud.


Was ist übrigens endlich mit den Takten ?

Marco78
16.12.2005, 22:33
Du hättest auch im anderen Beitrag nochmal nachfragen können, ob jemand noch ne Idee hat.

Es ist zwar ein blöder Spruch, aber hier passt er wohl ganz gut. "Rom wurde auch nicht an einem Tag erbaut."
Fang doch mal klein an. Nimm die Hardware-UART und sende dort deine Zeichen. Zuerst eine Zahl, dann einen String. Immer Schritt für Schritt vorgehen.
Wie soll man dir auch helfen bei deinem Problem?
Wenn selbst ein Codebeispiel bei dir nicht geht, was bei allen anderen ohne Probleme arbeitet?
Vielelicht ist es ja auch ein Hardwarefehler?
Was ist den mit den Fusebits? Hast du den/die AVR's auf externen Quarz gestellt?
Oder nimmst du den internen Taktgeber?
Passt die Takrfrequenz zu deiner Baudrate?

Besonder wichtig ist die Frage mit den Fusebits!

raptor_79
16.12.2005, 23:04
die geht, und die werde und will ich nur, und ausschließlich nur, für die übertragung zum pc verwenden.

im übrigen, hab ich einen fahrenden roboter. er erkennt bereits hindernisse, und fährt drum herum. alles super. nur das mit der kommunikation von einem avr zum anderen geht halt nicht. und ich dachte mir halt, daß ich wohl irgendwas falsch mache, sonst würde es ja gehen. darum das ganze.
und die fusebits scheinen zu stimme. der atmega32 läuft auf 49152Mhz (hatte nix anderes) der andere intern auf 1Mhz. ist ein atmega8.
könnte es daran liegen??

baudrate hab ich von ganz unten nach ganz oben und andersrum getestet. hab eigentlich alles durch, was ich selber auch so kann. drum schreib ich ja hier herein. hab sämtliche beispiele durch, die in irgendwelchen helpfiles/büchern stehen. wollte von jemanden wissen, der es selber mit serin/out arbeitet. weil, der evtl. eine erfahrung gemacht hat, die ich noch nicht gemacht habe, und in büchern sind schließlich auch fehler. habe da selber erfahrungen damit. hatte sowas erst kürzlich.

im übrigen:

DANKE DANKE für eure gedult mit mir.....

Ratber
16.12.2005, 23:24
der atmega32 läuft auf 49152Mhz

Ich vermute mal du meinst 4.9152Mhz
Ja der geht als Baudratenquarz bis 19200 ohne abweichung.


Der Andere Controller läuft aber mit 1 Mhz und da haste bei 19200 oder 9600 Baud satte 7.84% Abweichung.
Da wird kaum ne Komunikation oberhalb von Einzelnen Zeichen zustandekommen.

Erst mit 4800 oder weniger biste mit unter 1% wieder im Lot.

Es ist aber einfacher wenn du den M8 intern auf 4 Mhz stellst.
Dann klappts auch wieder mit 19200.
Auch einige der höheren Baudraten sind dann möglich da die Abweichungen untereinander recht gering sind.

Es gibt im Web sehr schöne Baudratenkalkulatoren mit denen man vorher sehr bequem überprüfen kann ob die Komunikation so hinkommt.

raptor_79
17.12.2005, 00:10
hmm... das wäre mal zu überdenken....
gut, 4Mhz bekomm ich auch noch.... und ja, 4.9152Mhz

ich arbeite auch nur bei 4800 baud. dachte mir, daß das für den anfang reicht.
weil besser mit dem oszi zu sehen.

Ratber
17.12.2005, 00:16
Ja wie gesagt, 4800 geht ja noch bei den Angegebenen Frequenzen.
Aber zubedebken ist das der Interne Oszilator nicht gerade der Stabilste ist.
Der wandert schnell mal in Pampa aus.

raptor_79
17.12.2005, 00:20
gut, dann bastel ich da morgen einen 4mhz rein.
hab das mit dem oszi mal gemessen. der atmega32 sendet scheinbar was. zumindest sieht es so aus. und der atmega8 sollte jetzt was empfangen, und dann die string variable in eine nummerische wandeln, die vergleichen, und zurücksenden. aber er reagiert nicht im geringsten auf die sendung des atmega32. da geht nix rein.
werd das mit den quarzen mal machen, und dann seh ich ja weiter.
langsam tragen sich doch mehr kleinigkeiten zusammen als man das vermuten möchte.

danke!!!

Ratber
17.12.2005, 01:42
langsam tragen sich doch mehr kleinigkeiten zusammen als man das vermuten möchte.

Ja,das liegt in der Art der Dinge.


Eine kleine Hypothetische nicht ausgefeilte Geschichte
==================================

Man nehme einen M8 und bau ihn 4x mit unterschiedlichen Schaltungen und Programierungen auf.

Die Erste Komuniziert per Serieller mit nem PC aber der Takt ist nicht ganz so Baudratenfreundlich wie er soll.Dazu ist der Takt vom internene Oszillator.
Es klappt aber auf dem Basteltisch (Beispiel hab ich mit absicht aktuell gehalten)

Die Zweite Treibt nen Motor per PWM hat aber nur minimale entstörung.
Läuft aber.

Nummer Drei bekommt über einen oder mehrere AD-Eingänge irgendwelche Wert und verarbeitet diese.
Läuft auch

Und die letzte hat ein LCD und beinhaltet eine Menüstruktur sowie eine Eingabekonsole (Einige Tasten,vieleicht Incrementalgeber)
Das ganze läuft nur im Pollmodus aber es läuft.


Jetzt packen wir alle 4 Projekte in einen M16 oder M32 und plötzlich läuft
garnix mehr so wie es in den einzelnen Schaltungen gelaufen ist.

Da der Controller noch anderes zu tun hat geht die eh schon wackelige Komunikation wegen dem nicht korrekten Systemtakt meist in die Hose.
Und wenn das Projekt mal andere Temperaturen als die üblichen 20° im Bastelzimmer bekommt dann betätigt sich der interne Oszillator zur Abwechslung mal als Temperatursensor.


Das Menü und die ganze Bedienung reagiert oft überhaupt nicht oder nur wenn man langsam und lange die Tasten drückt.

Der AD-Wandler wandelt nur Hausnummern weil der Motor über die nicht getrennte und vom Rest entkoppelte Analoge Versorgung dazwischen funkt.
Entsprechend kommt in der Routine nur Müll raus.

Und der Motortreiber wird richtig heiß weil der Treibende FET nicht richtig angesteuert wird.

Mit ganz großem Glück verursacht die mangelhafte Entkopplung aller Komponennten und des Spannungsreglers eine nette Oszilation ieben im Regler so das die Versorgung nicht läuft.


Das Ende vom Lied ist ein Projekt das umständlich nachgearbeitet werden muß.

Es empfielt sich immer nach dem groben Entwurf auch gleich an die gegenseitigen Wechselwirkungen zu denken auch wenn das schnelle Ergebnis noch so verlockend ist.
Das gilt für Hardware genauso wie für Software.
Stabilität ist das Zauberwort.

Wenn man sich mal diverse Schaltungen im Funktionsbereich anschaut dann merkt man schnell das oft 50% der Schaltung nur der sicherheit dient.

Was passiert wenn man nachlässig ist das konnte man eindrucksvoll an den ersten voll Komputerisierten BMW-Limousinen sehen.
Die hatten sozusagen einen Flughafenfinder "Onboard" :mrgreen:



Ja,diese Kleinigkeiten sind es die am Ende Zeit kosten aber sie garantieren eine Stabile Funktion.