Switchport

Programm-Beispiel oder Anleitung erhofft

Pedro Veloceros
 
Avatar
 
Subject:

Switchport

 · 
Posted: 21.11.2010 - 23:32  ·  #1
Hallo !

Ich möchte gerne in einer recht einfachen Schaltung mit einem Tiny24 einen Switchport einsetzen. Leider sind für mich die Hinweise im Standard-Treiber-Handbuch zu schwierig zu verstehen. Inbesondere habe ich nicht verstanden, wie man festlegt, dass ein bestimmter µC-Port zum Switchport umfunktioniert wird. Außerdem: wie liedt man dann diesen Switchport aus?

Kann mir jemand eine andere Anleitung nennen oder ein Programm-Beispiel?

Danke und Gruß
Pedro
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Switchport

 · 
Posted: 22.11.2010 - 00:04  ·  #2
Hi Pedro,

Du kannst einfach mal ein Test-Projekt erstellen und im AppWiz den Switchport definieren.
Dann siehst Du, was in der Pascal Source definiert ist und kannst das übernehmen.

Quote
wie man festlegt, dass ein bestimmter µC-Port zum Switchport umfunktioniert wird

1.: Import Systick, SwitchPort1, ..;
2.: SwitchPort1 = PinB; {SwitchPort}
3.: PolarityP1 = $F3; {Bit PortB2 und PortB3 LOW active}
Allerdings musst Du bei diesem Treiber daran denken auch die Port Register (DDRB) SELBER zu definieren.
Z.B. DDRB := DDRB AND %1111 0011; //PinB3, PinB2 = Input

Quote
wie liedt man dann diesen Switchport aus?

am Einfachsten:
if INP_STABLE1 (3) then ... ; // SWITCHPORT1 Bit3 = 0

Gruß
Gunter
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Switchport

 · 
Posted: 22.11.2010 - 00:17  ·  #3
noch einen Tip:
such im Verzeichnis "Demos" nach *.pas, die "Switchport" enthalten.
So findest Du Beispiele am Schnellsten:
Attachments
Switchport
Filename: tip.png
Filesize: 21.4 KB
Title:
Download counter: 101
Avra
Schreiberling
Avatar
Gender:
Location: Belgrade, Serbia
Age: 53
Homepage: rs.linkedin.com/in…
Posts: 653
Registered: 07 / 2002
Subject:

Re: Switchport

 · 
Posted: 23.11.2010 - 11:39  ·  #4
Pedro Veloceros
 
Avatar
 
Subject:

Re: Switchport

 · 
Posted: 24.11.2010 - 09:12  ·  #5
Hallo Gunter,

habe Deine Erläuterung verstanden. Mein Switchport zwitschert jetzt ganz munter mithilfe von INP_RAISE.

Allerdings bin ich mit dem Schaltverhalten noch nicht ganz zufrieden. Ich habe aber auch noch nicht alle Details verinnerlicht (Polarity, Edgemask) und auch den Tastschalter bisher nicht durchgemessen. Sobald ich damit durch bin, melde ich mich mit den sich ergebenden Fragen wieder zurück.

Vielen Dank schonmal
Pedro
Pedro Veloceros
 
Avatar
 
Subject:

SwitchPort-Verwendung für Einsteiger wie mich

 · 
Posted: 25.11.2010 - 21:17  ·  #6
So,

Dank der Hilfe von Gunter und nach der Beseitigung einiger Programmierfehler (Pull-Up-Widerstand versehentlich hin- und her definiert) funktioniert die SwitchPort-Anwendung zur Zufriedenheit. Für andere Einsteiger in einer ähnlichen Lage füge ich hier noch den Code an.

Code
program SwitchPortTest;

Device = Tiny24, VCC=5;

Import SysTick, PWMport1A, SwitchPort1; // SwitchPort1 = entprellter Schalter

From System Import ;

Define
  ProcClock      = 1000000;       {Hertz}
  SysTick        = 10;             {msec}
  StackSize      = $0010, iData;
  FrameSize      = $0010, iData;
  PWMres1        = 8;              {bits}
  PWMpresc1      = 8;
  SwitchPort1    = PinB, $00;  // Switchport1 auf PinB gelegt
                               // Edgemask $00 beeinflusst Schaltflanke, nicht genau verstanden

Implementation
{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
     PowStat : byte; // Leistungsstatus 25% = 1, 50% = 2, 100% = 3, 50% (kommend von 100%)= 4
{--------------------------------------------------------------}
{ functions }
{$IDATA}
procedure InitPorts;
begin
  PortA:= %00000000;
  DDRA:=  %11000000; // PA7 für rote LED, PA6 für PWMPort1A}
  PortB:= %00000011; // Bei Zuschalten der Batteriespannung geht grüne LED an: 000000>1<1
                     // Der über DDRB als Eingang festgelegte PIN PB0 für den SwitchPort1
                     //     bekommt einen Pull-Up-Widerstand: 0000001>1<
  DDRB:=  %00000010; // PB0 = Schaltereingang, PB1 = grüne LED}
end InitPorts;

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

begin
  PowStat := 1;            // beim Einschalten ist PowerStatus = 1 also 25%
  PWMport1A := 30;         // Bei Zuschalten der Batteriespannung geht Power auf 12 %
  InitPorts;
  EnableInts;
  loop
      {- Power --------------------------------------}
      if INP_RAISE1 (0) then // SWITCHPORT1 Bit0 = TRUE
         case PowStat of
              1 : PWMport1A := 60; // Power auf 60/255 = 24 %
                  PowStat := 2;
                  PortB:= %00000011; {grüne LED ein}
                  PortA:= %00000000; {rote LED aus}
                  |
              2 : PWMport1A := 255; // Power auf 100 %
                  PowStat := 3;
                  PortB:= %00000001; {grüne LED aus}
                  PortA:= %10000000; {rote LED an}
                  |
              3 : PWMport1A := 60; // Power auf 60/255 = 24 %
                  PowStat := 4;
                  PortB:= %00000011;
                  PortA:= %00000000;
                  |
              4 : PWMport1A := 30; // Power auf 60/255 = 12 %
                  PowStat := 1;
                  PortB:= %00000011;
                  PortA:= %00000000;
                  |
         endcase;
      endif;
  endloop;
end SwitchPortTest.
Pedro Veloceros
 
Avatar
 
Subject:

Switchport again

 · 
Posted: 28.11.2011 - 23:44  ·  #7
Werte Experten,

der Switchport hat mich nun nach ca. 1 Jahr wieder eingeholt.

Ich habe in einem Programm den SwitchTimerArray eingesetzt und alles funktioniert gut. Nun möchte ich aber nicht mehr die positive Schaltflanke sondern die negative auswerten. Eine Änderung im Define des Switchports von
Code
  SwitchPort1 = PinA, $00; // Trigger auf positive Schaltflanke 

auf
Code
  SwitchPort1 = PinA, $FF; // Trigger auf negative Schaltflanke 

hat leider nicht die gewünschte Wirkung erzielt. Was mache ich falsch?

Danke für Eure Hilfe
Pedro
Gunter
Administrator
Avatar
Gender:
Location: Frankfurt Main / Germany
Posts: 1697
Registered: 02 / 2003
Subject:

Re: Switchport

 · 
Posted: 29.11.2011 - 21:15  ·  #8
Hi Pedro,

ich vermute,
Du redest von AutoRepeat und willst den Schalter statt "active high" jetzt "active low" anschliessen?
Die Änderung der EdgeMask würde bedeuten, dass der Schalter beim inaktiv werden anfängt die Zeit zu messen. Das macht keinen Sinn
(ausser, Du willst einen Totmannschalter realisieren)
Wenn ich richtig liege, musst Du "Polarity" verwenden!

Gruß
Gunter
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: 16 · Cache Hits: 15   122   137 · Page-Gen-Time: 0.024431s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI