mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 2 * Avr seriell verntzen und einen string übergeben funkt. nicht(


Autor: Axel K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen : )

Ich stehe seit vorgestern vor einer Aufgabe dessen Lösung mir 
Kopfzerbrechen bereitet))

Ich habe schon im Forum gesucht und zu dem Thema etwas gefunden 
(pulslänge zählen und gleichzeitig eine paar segment anzeigen 
multiplexen) - Ständig habe ich mich gefragt, wie soll dass gehen wenn - 
sonst habe ich immer einer variable hochgezählt und beim einer erneuten 
low/high  flanke hatte ich den wert, jedoch würde solange die anzeige 
dunkel bleiben - jetzt weiss ich , dass ich mit timer und interrupts 
arbeiten muss.

Gestern bin ich davon ausgegangen, dass mir ein anderer Atmega 8 die 
länge zwischen den impulsen als string über den print befehl schickt und 
ich den mit meinem "segment multiplex atmega" nehme und anzeige.  Mein 
programm funktionierte tadellos, wenn ich variable d schon vorgebe.

$regfile = "m8def.dat" 
'ATMEGA8-Deklarationen
$crystal = 1000000
$baud = 9600                                                'für Segm. 
ansteuerung reicht der interne quarz


' Ein-/Ausgänge
Config Portb = Output                                       'Port B als 
Ausgang
Config Portd = Output
Portd = &B11111111
Portb = &B11111111                                        'vorerst auf 
"aus" da pnp transis noch nicht angesteuert werden müssen bzw sollen


Dim I As Byte                                               'zaehler 
variable
Dim X(14) As Byte                                           'speichert 
value table im array
'++++++++++++++++++++++++++++++string auseinandernehmen+++++++++

Dim D As String * 5                                         'eigentliche 
Drehzahl als Zahl als string  - später über uart zugesendet


Dim J As Byte                                               'zähler 
variable
Dim K(4) As String * 1                                      'hier werden 
die abgeschnittenen zahlen von d hineingelegt
 'Dim K(4) As Byte
Dim E As Byte                                               'bekommt den 
string wert von k xxx als variable zugewiesen


Dim Z As Byte                                               'uart
'++++++++++++++++++++++++++++++++++++

Restore Value_table

For I = 1 To 14
Read X(i)                                                   'lade 
tabelle in byte array siehe buch keuhnel s. 171
Next


 D = "1337"                                                 'zahl die 
auf segmente angezeigt werden soll

Do

If Usr.rxc = 1 Then                                         'Wenn Byte 
empfangen...
    Z = Udr
    D = Str(z)
                                                     'Byte aus UART 
auslesen
Else

D = D

End If

For J = 1 To 4

K(j) = Mid(d , J , 1 )

'd ist die zahl die später als string variable im eingangspuffer des 
uarts
'den 4 stelligen string wird geteilt und in k1 bis  geschoben

Next

'so, zahl wurde zerteilt - nun weiter!

For J = 1 To 4

'+++++++++++++++11111111111111111111111111
 'jenachdem welche stelle ausg. werden muss, wird entspr. portd 
gesteuert (pin d2 - d5 mit x(11) bis x(15))

Portd = X(9 + J)

'++++++++++++++++++++++++++

'soll eine abgeschn. zahl an port b ausgeben - zahl im array k(j) 
gespeichert


 E = Binval(k(j))                                           'hier wird 
aus dem string eine variable gemacht
   ' E = K(j)

Portb = X(e)

                                               'ausgabe der ziffer an 
portb (ziffer aus k4 schublade entspricht adresse entspr. muster der 
ziffer aus value table
Waitms 2
Portb = &B11111111

Next



Loop
End


Value_table:
'             1      2      3      4      5      6      7      8      9
Data &B11111001 , &B10100100 , &B10110000 , &B10011001 , &B10010010 , 
&B10000010 , &B11111000 , &B10000000 , &B10010000

' hier sind die muster für portd definiert um die ausgabe auf die 
entspr. segmente zu steuern

'     Ziffer 1      Ziffer 2     Ziffer 3     Ziffer 4
Data &B11111011 , &B11110111 , &B11101111 , &B11011111





Wenn ich jetzt aber einen string ueber meinen zweiten mikrocontroller 
senden will, dann habe ich nur komische zahlen - auch zb zeigt er ein 
zeichen an was garnicht in der value table gespeichert ist.

Dazu der code vom Atmega der "sendet"

$regfile = "m8def.dat" 
'ATMEGA8-Deklarationen
$crystal = 1000000
$baud = 9600



 Dim B As String * 5                                        'enthält 
wert f+r print befehl

Do

B = "1336"
Print B
   Waitms 10000
Loop
End




Der senden Atmega hat nur gnd und vcc  und rxd mit txd des 2 . 
Controllers verbunden und umgekehrt. Vielleicht endeckt ihr das problem 
((  Nichtsdestotrotz würde ich heute event. den weg angehen das ganze 
mit einem avr zu loesen aber mich interessiert, warum dieser befehl bei 
dem man eigenlich nicht viel verkehrt machen kann - nicht funktioniert 
((

Ich hoffe ich habe alles verständlich rueber gebracht)) und freue mich 
auf eure Antworten!

Gruss Axel

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.