Schalterabfrage in Bascom

Gast #69184
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?
Gast #69185
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
Gast #69187
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
Gast #69188
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.
Gast #69189
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;
      };


}
Gast #69190
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren