mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Was übersehe ich?


Autor: M. G. (sirmel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend zusammen,
folgendes Programm:
$regfile = "m8def.dat"
$framesize = 48
$swstack = 64
$hwstack = 64
$crystal = 8000000
$baud = 9600


Dim Empfangen As String * 3
Dim X As Bit , Y As Bit , Z As Bit 
Dim Ansteuerung As Byte , Wecksound As Byte
Dim Ansteuerung2 As Integer

X = 0
Y = 0
Z = 0
Wecker = 0

Config Portb = Output

Config Portc = Output

Config Portd.4 = Output
Config Portd.3 = Output
Summer Alias Portd.4
Pc Alias Portd.3

On Urxc Onrxd
Enable Urxc
Enable Interrupts





Do
If Len(empfangen) > 2 Then
   Ansteuerung2 = Val(empfangen)
   Select Case Ansteuerung2
      Case 400
         Pc = 1
         Empfangen = ""
      Case 401
         Pc = 0
         Empfangen = ""
      Case Is < 256
         Gosub Ansteuern
   End Select
End If
Loop
End

Ansteuern:
Ansteuerung = Ansteuerung2
   Portb = Ansteuerung
   Gosub Stehlampe
   Gosub Leuchtkugel
   Gosub Lichterkette
Empfangen = ""
Return

Lichterkette:
If Portb.4 = 1 Then : If X = 0 Then : Portc = &B00000000 : Portc.1 = 1 : X = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.4 = 0 Then : If X = 1 Then : Portc = &B00000000 : Portc.0 = 1 : X = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return

Stehlampe:
If Portb.6 = 1 Then : If Y = 0 Then : Portc = &B00000000 : Portc.3 = 1 : Y = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.6 = 0 Then : If Y = 1 Then : Portc = &B00000000 : Portc.2 = 1 : Y = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return

Leuchtkugel:
If Portb.7 = 1 Then : If Z = 0 Then : Portc = &B00000000 : Portc.5 = 1 : Z = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
If Portb.7 = 0 Then : If Z = 1 Then : Portc = &B00000000 : Portc.4 = 1 : Z = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
Return

Onrxd:
Empfangen = Empfangen + Chr(udr)
Return


Problem ist: Der Portb wird nicht richtig gesetzt. Nachdem die 
"Ansteuern" Schleife ausgeführt wurde, messe ich jeden Port von b durch 
aber keiner ist "1". Deshalb funktionieren auch die Schleifen 
Lichterkette, Leuchtkugel und Stehlampe nicht. Ist da irgendwas falsch? 
(Der µC läuft über (Mhz Interner Takt)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>   Ansteuerung2 = Val(empfangen)
>   Select Case Ansteuerung2
>      Case 400
>      :
>      Case 401
>      :
>      Case Is < 256
>      :
>   End Select

Trag doch in deinen Case mal noch einen Default-Zweig ein, dann siehst 
du, ob du Werte ungleich 400, 401 und größer 255 empfängst.

Autor: M. G. (sirmel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne das passiert ja nicht er spring schon die die Schleife Ansteuern

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M. G. wrote:
> Was übersehe ich?
Offensichtlich hauptsächlich die Forenregeln!

z.B. folgende:
>> # Aussagekräftigen Betreff wählen
>> # Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:
> Offensichtlich hauptsächlich die Forenregeln!
> :
>>> # Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
$regfile = "m8def.dat"
Es kann nur einen geben ;-)

Autor: M.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte noch mehr qualifizierte Kommentare=)

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller wrote:
>>>> # Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
>
$regfile = "m8def.dat"
> Es kann nur einen geben ;-)
Bei mir steht das nicht im Betreff ...;-)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird PORTB auch irgendwo mal gesetzt oder übersehe ich das jetzt?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven Pauli wrote:
> Wird PORTB auch irgendwo mal gesetzt oder übersehe ich das jetzt?
Ich sehe es auch nirgends. Sind wir schon zu zweit. Port B ist 
offensichtlich Ausgang und alle Pins 0 (default).

Autor: Sven H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Davon abgesehen, dass ein switch ohne default einfach nur Pfui ist!

Autor: M.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Portb wird doch hier gesetzt:
Ansteuerung = Ansteuerung2
Portb = Ansteuerung

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert deine seriele Übertragung? Ich würde mal nach dem Val() 
Empfangen und Ansteuerung2 zurück an den PC schicken.

Autor: M.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert ich bekomme genau die Werte dich ich sende. Es wird nur 
nicht der Port gesetzt.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven H. wrote:
> Davon abgesehen, dass ein switch ohne default einfach nur Pfui ist!
In Hardware ja... in Software ... wieso?

Autor: M.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was bedeutet switch ohne default?

Autor: sfthsfghgsdfhg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
über len würd ich nicht machen ... wenn deine kommunikation mal aus dem 
tritt kommt wirds übel.
nimm n definiertes endzeichen CR oder LF

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ M.G (Gast)
> Es wird nur nicht der Port gesetzt.
Hast du es überhaupt schon mal irgendwie geschafft, am Port B die Bits 
4, 6 und 7 zu setzen?

>> Portb = 16
>> Portb = 64
>> Portb = 128

Autor: M.G (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das mal in einem Testprogramm ausprobiert:

Dim x as byte

x=16

config portb=output


Do
portb=x
print x
wait 1
loop

und da hat er mir 16 ausgegeben und portb.3 gesetzt. mit anderen Werten 
hab das auch funktioniert. Werd das nachher mal ausprobieren, indem ich 
den den Ansteuerung2 Wert einfach vorgebe.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 16 ausgegeben und portb.3 gesetzt
Das wäre aber falsch :-(
Weil Bit 3 = 8
Bit    7   6   5   4  3  2  1  0
Wert 128  64  32  16  8  4  2  1

Autor: M. G. (sirmel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sry meinte portb.4 mein Fehler. So hab folgendes Ausprobiert:

Ansteuern:
Ansteuerung = 255
   Portb = Ansteuerung
   Gosub Stehlampe
   Gosub Leuchtkugel
   Gosub Lichterkette
Empfangen = ""
Return

Aber da tut sich auch nix. Nirgendwo einen Highpegel :/

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und so?
>   Portb = 255

Oder anders gesagt:
kommst du tatsächlich in deine Routine "Ansteuern"?

Autor: Sascha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ansteuerung2 ist als Integer deklariert, das heißt 2 Byte - da stellt 
sich die Frage welches der beiden Bytes denn nun in das Portregister 
soll. Wascheinlich wird bei der Typkonvertierung von Int -> Byte das MSB 
übernommen, und das ist bei Werten <256 immer Null.


Sascha

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke, daß diese Zeile:
Case Is < 256
         Gosub Ansteuern

dahingehend geändert werden muß:

Case Is < 256 : Gosub Ansteuern

MfG Paul

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.