-
        

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Hilfe, UART und ASCII ?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2003
    Ort
    Bad Krozingen
    Alter
    33
    Beiträge
    125

    Hilfe, UART und ASCII ?

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi Leute, ich hab mein Brückenprogramm soweit fertig..das problem:

    Ich will von der seriellen einen wert von -1024 bis 1024 empfangen..
    Ich kann den motor auch schon steuern, aber das proggi greift anscheinend immer nur ein ASCII-zeichen auf.. zb. wenn ich versuche 900 zu senden, nimmt er die 9, welches ASCII 57 ist...ich will aber die 900 haben, was kann ich ändern?

    Hier mal das Proggi

    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    $baud = 19200
    
    
    Dim S As Integer
    Dim S1 As Integer
    Dim I As Integer
    Dim J As Integer
    
    
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    
    Config Pind.5 = Output
    Config Pind.6 = Output
    Config Pind.7 = Output
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    
    Portd.6 = 1
    Portd.7 = 1
    
    On Urxc Onrxd
    Enable Urxc
    Enable Interrupts
    
    I = 0
    
    Do
    print "Speed=" ; S
    Loop
    
    Onrxd:
    S = Udr
    
    Return
    
    End
    Bitte helft mir, is echt wichtig, die RL steht ja bald an


    Gruss Stefan

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    22.09.2005
    Beiträge
    30
    Ohne dass ich jetzt genau helfen könnte, klingt das nach ner "verkürzten" Abfrage..
    Ich würde an der Stelle suchen, wo die Daten empfangen werden..
    -falscher Datentyp?
    -kein Buffer?
    -werden die empfangenen Zeichen hinterher nicht wieder zusammengesetzt?

    '900' sind ja immerhin 3 Byte als Ascii..

    Gruß
    Nico

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2003
    Ort
    Bad Krozingen
    Alter
    33
    Beiträge
    125
    Mhmm..also mit der Antwort kann ich jetzt nicht sooo viel anfangen, aber dank

    Datentyp is ja immerhin integer, der sollte das doch packen?
    Buffer kann ich keinen einbauen, weil ich ja die daten über interrupt empfange, dann meckert er beim compilen..

    Wieder zusammengesetzt..keine ahnung, weiss ja nicht mal warum ich jetzt plötzlich ascii empfange, wollt doch nur die 900 als dezimalzahl versenden, also egal was, irgend ne zahl zwischen -1023 und 1023..


    Gruss Stefan

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Wenn du Wert darauf legst, die UART mit Interrupt zu bedienen, mußt du einiges zu Fuß machen
    Vorschlag ohne Interrupt
    Code:
    dim instr as string * 5
    ' On Urxc Onrxd    entfällt
    ' Enable Urxc 
    Enable Interrupts 
    
    I = 0 
    
    Do 
    input "Enter Speed ", instr
    s = val(instr)
    print "Speed=" ; S 
    Loop 
    ' isr-routine entfällt
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    damit empängst du nur 1 byte, du musst eine abfrage machen ob 3 oder 4 byte empfangen wurden und diese dann mit val umsetzen in eine zahl.
    mit input wird das gesamte programm blockiert wird, bis zur eingabe.
    ausser du sendest zwischendurch dummys, nur damit der rest des programms angesprochen wird, geht auch.
    mfg pebisoft

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2003
    Ort
    Bad Krozingen
    Alter
    33
    Beiträge
    125
    Jo, ich wollte es ja auch erst mit input machen, aber wie schon erwähnt, blockiert dann das system und das Programm wird nicht fortgesetzt, da ich aber ne schleife hab in der gezählt werden muss, darf es nicht blockieren..

    würde es schon gerne mittels interrupt machen, hat mir vll. jemand nen codeschnipsel, dass ich es besser verstehe?

    Also beispiel sende ich zb. von hauptprozessor an das Programm hier:


    I=800
    Print #1, I

    oder print "800"

    was auch immer

    Gruss Stefan

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.835
    Nun, so soll es halt sein:
    Du kriegst deine Zahlen ascii-Zeichenweise, also mußt du sie zusammenbauen. Ich schreib nur das Wesentliche
    Code:
    Dim Inint As Integer 
    dim Vz as integer
    dim Inchar as byte
    
    On Urxc Onrxd 
    Enable Urxc 
    Enable Interrupts 
    
    Inint = 0
    VZ = 1
    
    Do 
       if inchar = 13 then         ' sonst dreht er wilde Schleifen
             print "Speed=" ; S 
       end if
    Loop 
    
    End ' end gehört eigentlich hierher
    
    Onrxd: 
       inchar = UDR
       if inchar = 13 then   ' <ENTER> d.h. fertig, input nach S
          s = inint * VZ      ' vorzeichen berücksichtigen
          inint = 0              ' fürs nächste
          VZ = 1              ' fürs nächste
      elseif
          inchar = 45 then   ' "-"  d.h. negative Zahl
          VZ = VZ * -1
     else
         inint = inint * 10   ' rüberrücken
         inchar = inchar AND 15  ' ascii --> binär
         inint = inint + inchar    ' einerstelle dazu
      end if
    Return
    Vorsicht, es erfolgt keine Prüfung, ob wirklich 0-9 eingegeben wird,
    auch nicht, ob mehrere Vorzeichen kommen.
    Ich hoff', ich hab mich nicht verschrieben
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    besser wäre es , wenn du einfach eine dummyzahl senden würdest damit input immer sofort weiterläuft. dann fragst du einfache mit if ab , ob es ein dummy ist. ist kürzer als das zusammensetzen, abfragen und wieder umwandeln.
    mfg pebsoft

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2003
    Ort
    Bad Krozingen
    Alter
    33
    Beiträge
    125
    Jo..also das sieht mir schon ziemlich komplex aus, aber ich kann auch nicht ständig ne dummyzahl senden, der hauptprozessor hat doch auch noch andere sachen zu tun...

    Gibts nicht noch ne andere möglichkeit? Früher konnt ich doch auch direkt zahlen versenden, warum geht das jetzt nicht mehr?

    Argh.,.ich krieg die kriese...


    Gruss Stefan

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    mensch junge, ein dummy braucht nicht viel zeit. probier das doch mal aus.
    was meinst du, wieviel zeit bei einem programm verschleudert wird, bloss weil hier und da ein wunsch einfliessen muss. den zeittest kannst du mit avrstudio sehr gut auswerten. du wirst staunen, wie schnell dieses ist.
    und wenn du dein programm in winavr-c schreibst, wird es ca um 400% schneller.
    wenn du auf schnelligkeit hohen wert gelegt hättest, dann wär das programm in winavr-c entstanden. also dümpelst du eh rum und beschwerst dich über ein eigelesenes pseudobyte.
    mfg pebisoft

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •