Forum: Mikrocontroller und Digitale Elektronik Was übersehe ich?


von M. G. (sirmel)


Lesenswert?

Nabend zusammen,
folgendes Programm:
1
$regfile = "m8def.dat"
2
$framesize = 48
3
$swstack = 64
4
$hwstack = 64
5
$crystal = 8000000
6
$baud = 9600
7
8
9
Dim Empfangen As String * 3
10
Dim X As Bit , Y As Bit , Z As Bit 
11
Dim Ansteuerung As Byte , Wecksound As Byte
12
Dim Ansteuerung2 As Integer
13
14
X = 0
15
Y = 0
16
Z = 0
17
Wecker = 0
18
19
Config Portb = Output
20
21
Config Portc = Output
22
23
Config Portd.4 = Output
24
Config Portd.3 = Output
25
Summer Alias Portd.4
26
Pc Alias Portd.3
27
28
On Urxc Onrxd
29
Enable Urxc
30
Enable Interrupts
31
32
33
34
35
36
Do
37
If Len(empfangen) > 2 Then
38
   Ansteuerung2 = Val(empfangen)
39
   Select Case Ansteuerung2
40
      Case 400
41
         Pc = 1
42
         Empfangen = ""
43
      Case 401
44
         Pc = 0
45
         Empfangen = ""
46
      Case Is < 256
47
         Gosub Ansteuern
48
   End Select
49
End If
50
Loop
51
End
52
53
Ansteuern:
54
Ansteuerung = Ansteuerung2
55
   Portb = Ansteuerung
56
   Gosub Stehlampe
57
   Gosub Leuchtkugel
58
   Gosub Lichterkette
59
Empfangen = ""
60
Return
61
62
Lichterkette:
63
If Portb.4 = 1 Then : If X = 0 Then : Portc = &B00000000 : Portc.1 = 1 : X = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
64
If Portb.4 = 0 Then : If X = 1 Then : Portc = &B00000000 : Portc.0 = 1 : X = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
65
Return
66
67
Stehlampe:
68
If Portb.6 = 1 Then : If Y = 0 Then : Portc = &B00000000 : Portc.3 = 1 : Y = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
69
If Portb.6 = 0 Then : If Y = 1 Then : Portc = &B00000000 : Portc.2 = 1 : Y = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
70
Return
71
72
Leuchtkugel:
73
If Portb.7 = 1 Then : If Z = 0 Then : Portc = &B00000000 : Portc.5 = 1 : Z = 1 : Waitms 500 : Portc = &B00000000 : End If : End If
74
If Portb.7 = 0 Then : If Z = 1 Then : Portc = &B00000000 : Portc.4 = 1 : Z = 0 : Waitms 500 : Portc = &B00000000 : End If : End If
75
Return
76
77
Onrxd:
78
Empfangen = Empfangen + Chr(udr)
79
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)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von M. G. (sirmel)


Lesenswert?

Ne das passiert ja nicht er spring schon die die Schleife Ansteuern

von Johannes M. (johnny-m)


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, ...)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von M.G (Gast)


Lesenswert?

Bitte noch mehr qualifizierte Kommentare=)

von Johannes M. (johnny-m)


Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

Wird PORTB auch irgendwo mal gesetzt oder übersehe ich das jetzt?

von Johannes M. (johnny-m)


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).

von Sven H. (Gast)


Lesenswert?

Davon abgesehen, dass ein switch ohne default einfach nur Pfui ist!

von M.G (Gast)


Lesenswert?

Portb wird doch hier gesetzt:
Ansteuerung = Ansteuerung2
Portb = Ansteuerung

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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

von M.G (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von M.G (Gast)


Lesenswert?

Was bedeutet switch ohne default?

von sfthsfghgsdfhg (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

von M.G (Gast)


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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

von M. G. (sirmel)


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 :/

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Und so?
>   Portb = 255

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

von Sascha (Gast)


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

von Paul Baumann (Gast)


Lesenswert?

Ich denke, daß diese Zeile:
Case Is < 256
         Gosub Ansteuern

dahingehend geändert werden muß:

Case Is < 256 : Gosub Ansteuern

MfG Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.