Forum: Mikrocontroller und Digitale Elektronik Schalterabfrage in Bascom


von dude (Gast)


Lesenswert?

wo ist mein fehler?

ich möchte die Tasterzustände an Porta abfragen und entsprechende
Ergenisse an Portc schicken;


Config Porta = Input
config portc = output

Dim X As Byte

Warten:
If Porta.1 = 1 Then
Portc = 8
End If
Goto Warten

(das ganze läuft auf einem 90s8535)

Danke

von Divison (Gast)


Lesenswert?

Die "aktuellen" Zustände werden im Register PINA ausgelesen. Nicht
PORTA.

von Divison (Gast)


Lesenswert?

Also etwas

if (PINA == 0x01){
mach_kafeemaschine_an();
}

Beim avr-gcc gibt es da eine schöne funktion die nennt sich
bit_is_set.

Ich mache das dann immer so
if (bit_is_set(PINA,7){
druck_die_lösungen_für_meinen_mathe2_schein(); :-(((
}

Vieleicht mal von Basic weg?

von stromi (Gast)


Lesenswert?

@dude

porobiere mal das im simulator:
prozessor und quarz festlegen, wenn nicht in der voreistellung :

$regfile = "M323def.dat"

Config Pina.1 = Input   'ein portpin festlegen,
                        'bei ganzen port portx 0 input
Config Pinc.1 = Output  'dto

Dim X As Byte

Warten:
If Pina.1 = 1 Then    ' port A pin 1 auf high ?
Set Pinc.1            ' wenn ja port C pin 1 auf high setzen
Else                  ' aber wenn Schalter wieder aus,
Reset Pinc.1          ' oder nie an, dann Port C pin 1 Low setzen
End If
Goto Warten


gibt auch noch debounce zum entprellen und andere
Programmiermöglichkeiten

von Shazter (Gast)


Lesenswert?

Hi,

man sollte vielleicht auch noch den internen Pullup aktivieren sonst
bekommt man schnell undefinierte Zustaende ... sprich obwohl der
schalter nicht geschlossen haste am Pin eine logische 0.

Hier ist nochmal eine schoenes Internettutorial fuer Bascom

http://www.rowalt.de/

mfg

Dirk

von leo9 (Gast)


Lesenswert?

@ Divison:
>>Vieleicht mal von Basic weg?
Wozu den Seitenhieb auf Basic? Den PORT/PIN-Fehler kann man in allen
Programmiersprachen machen (auch im heiligen c). Die Pin-Direction muß
man ebenfalls in allen Sprachen definieren und das Einschalten der
Pull-Ups ist elektrisch und nicht sprachlich erforderlich. Für newbies
ist eine ide halt deutlich einfacher als die Konsolen-tools vom gcc.
Laß die Leut doch am Anfang "quick und dirty" programmieren, wenn der
Speicher zu klein oder die Anforderungen zu groß werden, muß man ja
eh' seine Programmierunmgebung überdenken.
Und von IDE installieren bis zur blinkenden LED ist der Weg mit Bascom
einfach leichter als mit gcc (und dazwischen gibt es sicher etliche
weitere Compiler).

grüsse leo9

von Dude (Gast)


Lesenswert?

Klingt doch alles schon sehr gut.

Würde gern weg von Basom. Habe das mit Codevision und PonyProg
auch schon probeiert. Krieg´s aber nicht hin? Das engli. Tutorial
für Codevision ist zu hoch für mich.

Jemand zu obigem Basom Problem mal einen "muster"-code für
codevision. Und wie bekomme ich mein Hex-File für PonyProg.

Danke.

von Oliver (Gast)


Lesenswert?

@ Dude

hier die Initialisierung der Ports für codevision.


void main(void)
{
// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In
Func7=In
// State0=P State1=P State2=P State3=P State4=P State5=P State6=P
State7=P
PORTA=0xFF;
DDRA=0x00;

// Port B initialization
// Func0=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out
Func6=Out Func7=Out
// State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0
State7=0
PORTB=0x00;
DDRB=0xFF;


while (1)
      {
      if (PINA.1 == 1) PORTB = 8;
      };


}

von Kalle (Gast)


Lesenswert?

Hi dude

hier auch noch mal das Gegenstück zur Initialisierung der Ports in
BASCOM


Config Portb = Output        'ganzer Port als output
Config Portb = Input         'ganzer Port als Input
Config Portb = &B00011000    'beides = Output=1,input=0
Portb = &B11100111           'PullUp Widerstände auf einzelne
InputPins
Portd = 255                  'PullUp auf kompletten Port

Abfrage einfach mit
if Pinb.2 = 0 then ......

Sinnvoll ist hier auch die alias-Funktion zu verwenden, z. B.:
Pin_jumper12 Alias Pind.2

dann muss im Code z. B. bei wechelseldem Layout der Schaltung nicht
immer irgendein Port gesucht und geändert werden bzw. der Code ist dann
selbstsprechend/besser lesbar. Änderungen müssen dann nur noch am
Anfang des Programmes im Declarationsteil gemacht werden.

Beispiel:
....
$regfile = "2313def.dat"
$crystal = 4000000
Config Watchdog = 1024
Config Portb = &B00011000       'Output=1=Pb3,Pb4 rest input=0
Portb = &B11100111              'PullUp Widerstände auf die
Input-Pins
Config Portd = Input
Portd = 255                     'PullUp Widerstände auf die
Input-Pins
Pin_melodie Alias Pinb.5
Pin_taster_aus Alias Pinb.2
Pin_taster_lr Alias Pind.6
Pin_jumper12 Alias Pind.2
Pin_jumper34 Alias Pind.3
Pin_jumper56 Alias Pind.4
Pin_jumper78 Alias Pind.5
Port_blaus Alias Portb.4
Port_schaltausgang Alias Portb.3
......


mfg Kalle

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.