www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schalterabfrage in Bascom


Autor: dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Divison (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die "aktuellen" Zustände werden im Register PINA ausgelesen. Nicht
PORTA.

Autor: Divison (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: stromi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Shazter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dude (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
      };


}

Autor: Kalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.