mikrocontroller.net

Forum: Projekte & Code [BASCOM] Adresse mit Dip Schalter


Autor: David .. (david1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Ich hab mir vorhin eine kleines Progrämmchen, bzw ne Sub in Bascom 
geschrieben um einen 8-poligen Dip-Schalter zur Adresseingabe 
einzulesen.

Hab das Programm in englisch kommentiert, hoffe man verstehts, aber ist 
eigentlich selbsterklärend.

urz zur Schaltung, ist auf meinem Stecjbrett aufgebaut, läuft mit einem 
Mega8 an dem ein 8MHz Quarz hängt, auserdem geht der Uart über nen 
MAX232 an meinen Laptop über ne PCI-Express Karte.

Der Dip Schalter ist 8-polig und an die im Code stehenden Pins 
angeschlossen, die Schalter ziehen gegen GND


Kurze beschreibung:
In der Sub wird zuerst die Variable in dem später die Adresse 
gespeichert wird auf 0 gesetzt um danach Problemlos rechnen zu können.
Anschliesend wird überprüft welcher Dip Schalter auf on steht, und z.B. 
beim Schalter Nummer 2, zur Adresse 2 dazugezählt wird.

Die Adresse wird so eingestellt:
In diesem Fall gibt es 8-Schalter:

                              --------------------------------------
Schalter Nummer               | 0 | 1 | 2 | 3 |  4 |  5 |  6 |  7  |
                              |------------------------------------|
Adresse (2^Schalter-Nummer)   | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 |
                              --------------------------------------

Nun können wir alle Adressen zwichen 0 und 255 einstellen in dem wir zum 
gewünschten Wert die nächst kleinere Zahl suchen und den Rest dazu 
addieren.

Also möchten wir z.B. 39 einstellen müssen wir den Schalter Nr.5,2,1 und 
0 auf on setzen.

Bei 138 dementsprechend: 7,2 und 1

Hoffe ich konnte das einigermaßen verständlich erklären. Und ich hoffe 
es kann jemand was damit anfangen ;)


Das Programm ist auf beliebig viele Schalter erweiter, bzw 
"verkleinerbar" (sagt man dass so?)


Gruss
David

Autor: Calogero Digangi (Firma: swissgrd.va) (cdg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube nicht das jemand das braucht,
Portsetzen, Portlesen = Grundgerüst

Verstanden hast Du aber Dein Programm noch nicht

> Anschliesend wird überprüft welcher Dip Schalter auf on steht, und z.B.
> beim Schalter Nummer 2, zur Adresse 2 dazugezählt wird.

Nee, Schalter 2 on, hat die Wertigkeit 4 (Du fängst ja bei 0 an)


> Bei 138 dementsprechend: 7,2 und 1

Schalter 7 on, Wertigkeit 128
Schalter 2 on, Wertigkeit   4
Schalter 1 on, Wertigkeit   2
-----------------------------
macht bei mir 134 statt Deinen 138

cdg

Autor: David .. (david1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Is mir auch grad aufgefallen. Hab die Nummern glaub erst hinterher 
korrigiert. Ich änders grad

EDIT: Wieso kann ich den Post nichmehr ändern?

Naja egal, hier die berichtigte Version:

Bei 138 dementsprechend: 7,2,1 und 0



Gruss
David

Autor: Calogero Digangi (Firma: swissgrd.va) (cdg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David S. schrieb:
> Is mir auch grad aufgefallen. Hab die Nummern glaub erst hinterher
> korrigiert. Ich änders grad
>
> EDIT: Wieso kann ich den Post nichmehr ändern?
>
> Naja egal, hier die berichtigte Version:
>
> Bei 138 dementsprechend: 7,2,1 und 0
>
>
>
> Gruss
> David

Wieder nicht richtig geraten

2^7 + 2^2 + 2^1 + 2^0 = 135

128 +  4  +  2  +  1  = 135

Dein nächster Versuch sollte dann zu

7,3,1 führen.

2^7 + 2^3 + 2^1 = 138

128 +  8  +  2  = 138

Dreh mal den DIL-Schalter (Deine Tabelle) um 180 Grad,
also LSB nach rechts und MSB dann links.

Dann muss man nicht ím Kopf drehen und es liest sich besser (für mich).

cdg

Autor: Dimi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe für AVR mit Basic nie programmiert,
mit C geht das total easy...
zahl = PINA;

MfG

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum dicht einfach bin in dez umwandeln?
ggbf. bin Eingänge invertieren um nicht im "Kopf alles umdrehen zu 
müssen"

geht super einfach.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David S. schrieb:
> Hab das Programm in englisch kommentiert, hoffe man verstehts, aber ist
> eigentlich selbsterklärend.
Dim Dip_adress As Byte                                      'defines var "Dipp_adress" as Byte
Dip_adress = 1                                              'sets "Dip_adress at startup to 0"

Das ist ein klassisches Beispiel dafür, wie man Programme nicht 
kommentieren sollte. Absolut sinnfrei, da wörtlich das wiederholt wird, 
was im Programmtext schon steht, dazu dann auch noch verwirrend.

Besser wäre es gewesen, wenn du kurz beschrieben hättest, was das 
Programm macht. Denn das eigentliche "Feature", daß die DIP-Bits 
beliebig auf die Ports verteilt sein dürfen, sieht man nicht sofort.

Oliver

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.