Bits schalten

Scheitern auf niedrigem niveau :)

werner mehl
Benutzer
Avatar
Gender:
Age: 68
Posts: 49
Registered: 02 / 2012
Subject:

Bits schalten

 · 
Posted: 28.02.2017 - 17:38  ·  #1
Hallo

es wäre sehr nett, wenn mir mal jemand auf die Sprünge helfen kann.
Ich habe zwei Programmversionen die sich unterschiedlich verhalten,
und ich verstehe gerade die Welt nicht mehr :)

Das folgende Programm funktioniert einwandfrei!

--------------------------------------------
--------------------------------------------

program BLS_1;

{$NOSHADOW}
{ $WG} {global Warnings off}

Device = mega16, VCC=5;
{ $BOOTRST $01C00} {Reset Jump to $01C00}

Define_Fuses
// Override_Fuses;
NoteBook = B;
COMport = USB;
LockBits0 = [];
FuseBits0 = [];
FuseBits1 = [SPIEN, JTAGEN, OCDEN];

Import SysTick;

From System Import ;


Define
ProcClock = 4915200; {Hertz}
SysTick = 50; {msec}
StackSize = $0064, iData;
FrameSize = $0064, iData;

Implementation

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }

type


{--------------------------------------------------------------}
{ Const Declarations }

{--------------------------------------------------------------}
{ Var Declarations }
Var
{$IDATA}

LED[@PortB,5] : Bit;
Licht[@PortA,4] : Bit;
BW1[@PinB,0] : Bit;
BW2[@PinB,1] : Bit;
BW3[@PinB,2] : Bit;

LichtTimer : SysTimer;

{--------------------------------------------------------------}
{ functions }

procedure InitPorts;
begin
DDRA:= %00010000;
DDRB:= %00100000;
end InitPorts;

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}

begin
InitPorts;
EnableInts;
SetSystimer(LichtTimer,120); // Einschalten für 0,1 Minute
led := True;
Licht := True;

loop

If BW1 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;

If IsSysTimerZero(LichtTimer) Then
led := False;
Licht := False;
EndIf;

endloop;
end BLS_1.

--------------------------------------------
--------------------------------------------

Wenn ich jedoch diese Änderung vornehme, der Rest bleibt gleich.



If BW1 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;

If BW2 Then
SetSystimer(LichtTimer,240); // 2400 = ca. 120 sek.
led := True;
Licht := True;
EndIf;


(ich habe auch kürzer formuliert getestet!)

Dann wird beim Programmstart led = true und Licht = true, und bleiben dort bis in alle Ewigkeit.
Vielleicht hat jemand eine Idee, wo ich auf dem Schlauch stehe.

Danke :|
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2134
Registered: 03 / 2003
Subject:

Re: Bits schalten

 · 
Posted: 28.02.2017 - 17:58  ·  #2
Hallo Werner,

hast du an B0..2 externe PullDown-Widerstände?
Hast du mal PortB:=PortB and %11111000; mit in dein InitPorts eigebaut?

Gruss
Harry
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Bits schalten

 · 
Posted: 28.02.2017 - 20:58  ·  #3
Hallo Werner,

im zweiten Fall werden die LEDs offensichtlich nie auf false gesetzt....

rolf
werner mehl
Benutzer
Avatar
Gender:
Age: 68
Posts: 49
Registered: 02 / 2012
Subject:

Re: Bits schalten

 · 
Posted: 01.03.2017 - 09:29  ·  #4
Hallo Harry, hallo Rolf,

besten Dank für die Antworten!

Harry, der Tip mit den Pulldown Widerständen war gut!
Ich hatte keine eingebaut, da an den Eingängen aktive Push Pull Stufen sitzen.
Scheinbar kann man sich auf nichts verlassen :)

Besten Dank nochmal
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: Bits schalten

 · 
Posted: 01.03.2017 - 12:26  ·  #5
Hallo Werner,
PullDowns gibt es nur bei den XMegas.
Und PushPull ist nur für Ausgänge relevant.

rolf
werner mehl
Benutzer
Avatar
Gender:
Age: 68
Posts: 49
Registered: 02 / 2012
Subject:

Re: Bits schalten

 · 
Posted: 01.03.2017 - 15:03  ·  #6
Hallo Rolf,
das ist mir schon klar. Ich habe mich da vielleicht etwas undeutlich ausgedrückt.
In den externen Sensoren sind am Ausgang Push-Pull Stufen. Deshalb auch "am Eingang" des Controllers ;)

Grüße, Werner
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 14 · Cache Hits: 14   110   124 · Page-Gen-Time: 0.024225s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI