Software+Hardware UART's für atmega32

Gast #2981630
Lesenswert?

Hallo,
ich sitze nun schon einige tage/wochen da und Reis mir bald die haare 
aus...
bekomm Hardware und Software UART zum laufen aber nur bei den RX/TX 
Pins,
habe aber wo gelesen das man auch andere pin’s nehmen könnte
was ich benötigen würde 2x UART also 1x Software und 1x Hardware-UART.

PC <-> Chip1 <-> Chip2

Chip2: Tasta + LCD-Display 16*2
Chip1: Kontakt-Reader’s + MotorDriver, e.c.t
Es soll von Chip2 zu Chip1 die tasten gesendet werden und evtl. 
Meldungen ans Displ.
Cip2 und Chip1 sind getrennt also räumlich (Aussen/-Innen-Einheit) max 
2-5m
Der Pc soll als Logger und evtl. Remote verwendet werden.

ja ich weis, es gibt einen atmega mit 2 UART’s, aber ich will es wenn’s 
mal geht auf rs485 umbauen.

Ich bekomme alle Schnittstellen nur immer über die Rx/Tx pins zum laufen 
obwohl ich explicit andere Pins angebe.

z.b
Open comC.1
SerialIn/Out
Das ganze darf nicht warten wie bei Input und Co....

Bitte in Bascom
Gast #2981648
Lesenswert?

wenn ich z.b
Open "comc.0:19200,8,n,1" For Input As #2
angebe und ich was sende an den RX/TX von den atmega32 dann zeigt er mir 
das an obwohl ich nix mit bound e.c.t angegeben habe also HW nicht 
konfig.
egal was ich sag er zeigt mir immer alles an was bei RX/TX ankommt und 
nicht was bei C0 ankommt.

mmm schlecht beschrieben ich weis... keine nerven mehr
Gast #2983084
Lesenswert?

Soo nun habe ich nach suchen und versuchen es nun zum laufen bekommen
Mehr oder weniger, Daten senden und Empfangen gehen in allen Richtungen
Nur 2 probs habe ich wobei ich erst mal das erste Public mache.

Also, zum prb:
Wenn ich bei chip1 Daten sende do loop und keine waitms 20 oder so mache 
dann bekomme ich beim Chip2 der in mom nur empfängt datenübelappungen
Ich sende „Count_x“ x geht von 0 – 65535 das ganze wird als string 
gesendet

Nun wenn ich die Daten zu schnell sende kann es vorkommen das eine zahl 
am Ende stehen bleibt, dachte erst es liegt am Display aber auch durch 
manuell cls über Button z.b geht es nicht weg, es scheint mir ein Daten 
prb oder performenc prb zu sein glaube ich, denn wenn ich ne pause von 
>10 ms nach dem Senden mache geht es immer....

Im Anhang der emfangs-teil kann mal jemand drüber gucken ob jemanden was 
aufällt

PS: bitte obiges beachten wieso ich 2 Chips verwende also kein 
Hartware-UART e.c.t vorschlagen.

Gruß
  Chriss
Angehängte Dateien:
#2983131
Lesenswert?

Hi,

sorry, Deine Beschreibung versteht keine Sau.

Was mir aufgefallen ist:
---------------------
Dim Daten As String * 254
Dim Bdaten(254) As Byte At Daten Overlay
Dim Anzahl As Byte
---------------------
und später:
---------------------
Incr Anzahl
Bdaten(anzahl) = Zeichen
---------------------

Sagen wir mal, der String Daten fängt bei Adresse 0 an.
Dann ist der String an den Adressen 0-253.
In Adresse 254 steht die Länge des Strings.
Anzahl rauscht von 0-255 durch.
Das Array Bdaten ist definiert von Index 1 bis 254 und dieses liegt auf 
den Adressen 0 bis 253.

Bei Anzahl = 0 schreibst Du "Zeichen" in irgendeine Variable an der 
Adresse -1, vor dem Array denn Bdaten(0) gibt es nicht.
Bei Anzahl = 255 überschreibst Du die Länge des Strings.

Gruß,
Norbert
#2983167
Lesenswert?

Hi,

das ist doch kein Chat hier.
Beschreib doch bitte mal, was da genau passiert im Gegensatz zu dem, was 
Du erwartest.

Stimmt, erst incr und dann das Array.
Kommt denn da auch oft genug die 13 an, damit Anzahl wieder zurück 
gesetzt wird bevor es überläuft?
Was sendest Du genau?
Speck die Sendesoft mal so weit ab, daß sie noch funktioniert und das 
Problem immer noch auftritt und poste das dann.

Das ist alles relativ banal aber wenn Du nicht genau beschreibst was Du 
da machst und was passiert, kann man Dir nicht wirklich helfen.

$crystal = 16000000
Das ist hoffentlich ein mindestens ein Keramikresonator?

Gruß,
Norbert
Gast #2983285
Lesenswert?

Aktuell ist es so:

Ich will einfach Daten von a nach b senden mit max Geschwindigkeit bzw. 
wichtiger ohne Datenverlust

So sendet der eine Chip die Daten z.b

dim a as long
Do
  Dim b as string *254
  a=a+1
  B=”Count_” + str(a)
  Print b
  waitms 20
Loop

Sooo ich habe nun eine Prüfung bei der Empfangs-routine eingebaut, das 
die anzahle nicht über 254 gehen kann bzw. sollte das auftreten wird mir 
das angezeigt am Display (Index ERR).

Sende ich nun die Daten ohne waitms dann wird Index ERR angezeigt oder 
es bleiben zeichen am ende stehen die wiederum mit kürzeren 
zeichen-längen überschrieben werden. Daraus schließe ich das die Daten 
nicht korrekt ankommen oder er zu wenig 13er zeichnen erkennt, die 
jedoch autom. Mit dem print Befehl gesendet werden.

Den String (Testdaten) die ich sende sind max 30 zeichnen...
Angehängte Dateien:
#2983317
Lesenswert?

dim a as long
Do
  Dim b as string *254
  a=a+1
  B=”Count_” + str(a)
  Print b
  waitms 20
Loop

Das ist garantiert nicht das was sendet.
a as long und zählt bis ins Nirwana, Dim in der Schleife...

Die LCD-Routine dauert zu lang und dann verpasst das Moped Zeichen, das 
könnte der Fehler sein.

Gruß,
Norbert
Gast #2983385
Lesenswert?

habe das anzeigen mal raus nur bei dem fehler (index err) nicht, aber 
selbst das nuzte nichts, könnte es evtl an inky liegen ?

Zitat:

Wenn ein Zeichen im zwei Byte großen UART-Buffer steht, dann gibt INKEY 
ein Zeichen zurück. Steht nichts mehr im UART-Buffer, dann gibt INKEY 
die Zahl 0 zurück....

Zitat-ende

verkettung ungünstiger ereignisse Max 2 byte inkey buffer, lcd time ifs, 
und mehr zeichen senden als 2 bytes und sehr schnell ??????

mmmm ich weis net aber ich denk mit bascom werd ich nicht glücklich...
ich weis net ma ob atmega-chips das richtige ist für meine projekt... 
vorstellungen alles machen zu können/ grenzenlos
#2983410
Lesenswert?

Hi,

das ist natürlich nicht grenzenlos.

Liest Du eigentlich Deine Beschreibungen selbst nochmal durch?
Wer soll das Kauderwelsch denn verstehen?

Du musst eben wissen, was in Bascom mit diesen höheren Funktionen geht 
und was nicht. Vieles geht nicht und dann ist etwas Handarbeit und 
Datenblatt lesen angesagt.
Wenn Du mit Bascom nicht glücklich wirst, dann nimm C und mach alles zu 
Fuß.
Könntest Du zwar auch in Bascom aber das ist Dir überlassen.
In Bascom musst Du nur eben mehr Hand anlegen wenn es zeitkritisch ist, 
die lahmen Sachen gehen dagegen sehr bequem.

Wenn Du fertige Libs in C benutzt hast Du aber das selbe Problem. Die 
brauchen ihre Zeit, nutzen ev. Timer usw..
Genau wie in Bascom.
Wenn Du volle Controlle haben willst, musst Du alles selbst zu Fuß 
machen. Bei einigen Dingen geht es kaum anders, ob nun Bascom oder C. 
Bei anderen braucht man das nicht, dann ist es auch egal welche Sprache.

Auch mit Bascom muß man das Datenblatt lesen, auch wenn das für die 
erste blinkende LED auch ohne geht.

Gruß,
Norbert

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren