Bascom Hallo und Hilfe

Amir

Neues Mitglied
25. Nov. 2014
5
0
0
39
Sprachen
Guten Abend liebe Forum-Nutzer,
ich bin neu hier und suche Hilfe bzgl. der Bascom-Programmierung.
Wir haben in der Uni ein Modul in diesem Bereich, in dem wir uns mit dem Programm Bascom beschäftigen.
Zunächst haben wir uns eine Schaltung mit einem Atmega8 gebaut und eine Schaltung für den Programmer.
Nun will ich mich ein bisschen im Programmieren üben, habe aber leider keine Vorerfahrung oder sonstiges.

Der Aufbau von der Atmega-Schaltung hat zwei 7-Segment Displays, wo bereits alle Pins vordefiniert sind. Außerdem gibt es noch zwei Taster welche ebenso definiert sind.....

Ich wäre euch dankbar, wenn ihr mir eine Starthilfe geben könntet bzw.irgendwas wie ich lernen kann, ein Programm zu schreiben....

MfG Amir
 
Nachtrag

Wenn es hilft habe ich mal den vorgegebenen Programmcode kopiert:

Code:
$regfile = "m8adef.dat"                                     'Um welchen Mikrokontrollertyp handelt es sich: Es handelt sich um einen ATmega8
$crystal = 1000000                                          'Der eingebaute RC-Oszillator läuft mit 1MHZ

2oben Alias Portb.7                                         'Ports umbenennen. Port steht in diesem Fall für die LED welche im Segment ein Signal erhält'
2mitte Alias Portd.4
2unten Alias Portc.0                                        'Man kann auch einen ganzen Port verändern, wenn man den Punkt und Zahl weglässt
2obenlinks Alias Portb.6                                    'Registerportbuchstabe.Pinnummer=Wert
2obenrechts Alias Portd.5
2untenlinks Alias Portc.1
2untenrechts Alias Portb.2
1oben Alias Portd.2
1mitte Alias Portd.0
1unten Alias Portc.4
1obenlinks Alias Portd.1
1obenrechts Alias Portd.3
1untenlinks Alias Portc.5
1untenrechts Alias Portc.3
Taster1 Alias Pinb.4                                        'Einlesen input
Taster2 Alias Pinb.5

Config 1oben = Output                                       'Umbenannte Ports als Inputs oder Outputs festlegen'
Config 1mitte = Output
Config 1unten = Output
Config 1obenlinks = Output
Config 1obenrechts = Output
Config 1untenlinks = Output
Config 1untenrechts = Output
Config 2oben = Output
Config 2mitte = Output
Config 2unten = Output
Config 2obenlinks = Output
Config 2obenrechts = Output
Config 2untenlinks = Output
Config 2untenrechts = Output
Config Taster1 = Input
Config Taster2 = Input

Portb.4 = 1                                                 'Was hat das für einen Zweck?
Portb.5 = 1






'Unterprogramme
1null:
   1oben = 1
   1mitte = 0
   1unten = 1
   1obenlinks = 1
   1obenrechts = 1
   1untenlinks = 1
   1untenrechts = 1
Return

1eins:
   1oben = 0
   1mitte = 0
   1unten = 0
   1obenlinks = 0
   1obenrechts = 1
   1untenlinks = 0
   1untenrechts = 1
Return

1zwei:
   1oben = 1
   1mitte = 1
   1unten = 1
   1obenlinks = 0
   1obenrechts = 1
   1untenlinks = 1
   1untenrechts = 0
Return

1drei:
   1oben = 1
   1mitte = 1
   1unten = 1
   1obenlinks = 0
   1obenrechts = 1
   1untenlinks = 0
   1untenrechts = 1
Return

1vier:
   1oben = 0
   1mitte = 1
   1unten = 0
   1obenlinks = 1
   1obenrechts = 1
   1untenlinks = 0
   1untenrechts = 1
Return

1fuenf:
   1oben = 1
   1mitte = 1
   1unten = 1
   1obenlinks = 1
   1obenrechts = 0
   1untenlinks = 0
   1untenrechts = 1
Return

1sechs:
   1oben = 1
   1mitte = 1
   1unten = 1
   1obenlinks = 1
   1obenrechts = 0
   1untenlinks = 1
   1untenrechts = 1
Return

1sieben:
   1oben = 1
   1mitte = 0
   1unten = 0
   1obenlinks = 0
   1obenrechts = 1
   1untenlinks = 0
   1untenrechts = 1
Return

1acht:
   1oben = 1
   1mitte = 1
   1unten = 1
   1obenlinks = 1
   1obenrechts = 1
   1untenlinks = 1
   1untenrechts = 1
Return

1neun:
   1oben = 1
   1mitte = 1
   1unten = 1
   1obenlinks = 1
   1obenrechts = 1
   1untenlinks = 0
   1untenrechts = 1
Return

2null:
   2oben = 1
   2mitte = 0
   2unten = 1
   2obenlinks = 1
   2obenrechts = 1
   2untenlinks = 1
   2untenrechts = 1
Return

2eins:
   2oben = 0
   2mitte = 0
   2unten = 0
   2obenlinks = 0
   2obenrechts = 1
   2untenlinks = 0
   2untenrechts = 1
Return

2zwei:
   2oben = 1
   2mitte = 1
   2unten = 1
   2obenlinks = 0
   2obenrechts = 1
   2untenlinks = 1
   2untenrechts = 0
Return

2drei:
   2oben = 1
   2mitte = 1
   2unten = 1
   2obenlinks = 0
   2obenrechts = 1
   2untenlinks = 0
   2untenrechts = 1
Return

2vier:
   2oben = 0
   2mitte = 1
   2unten = 0
   2obenlinks = 1
   2obenrechts = 1
   2untenlinks = 0
   2untenrechts = 1
Return

2fuenf:
   2oben = 1
   2mitte = 1
   2unten = 1
   2obenlinks = 1
   2obenrechts = 0
   2untenlinks = 0
   2untenrechts = 1
Return

2sechs:
   2oben = 1
   2mitte = 1
   2unten = 1
   2obenlinks = 1
   2obenrechts = 0
   2untenlinks = 1
   2untenrechts = 1
Return

2sieben:
   2oben = 1
   2mitte = 0
   2unten = 0
   2obenlinks = 0
   2obenrechts = 1
   2untenlinks = 0
   2untenrechts = 1
Return

2acht:
   2oben = 1
   2mitte = 1
   2unten = 1
   2obenlinks = 1
   2obenrechts = 1
   2untenlinks = 1
   2untenrechts = 1
Return

2neun:
   2oben = 1
   2mitte = 1
   2unten = 1
   2obenlinks = 1
   2obenrechts = 1
   2untenlinks = 0
   2untenrechts = 1
Return
 
Hi Amir,

erstmal ein herzlich willkommen :flowers:

und dann ... :rolleyes: ... OK ... :eek: ... man sieht das du ne ganze Menge Starthilfe benötigst :p
Das Programm ist ... naja ... es wird schwierig so eine einfache Sache noch komplizierter zu programmieren :rolleyes:

Erstmal nen kurzer Auszug aus dem Programm für die anderen ...
Nen Datenblatt von einem 7Segment-Display ...
Anhang anzeigen SA40-19SRWA_KingBright_7Segm_100mm.pdf

Oben = Segment A
ObenRechts = Segment B
UntenRechts = Segment C
Unten = Segment D
UntenLinks = Segment E
ObenLinks = Segment F
Mitte = Segment G

Man zählt also von oben anfangend im Uhrzeigersinn die Buchstaben durch. Der letzte ist dann in der Mitte.

Portb.2 -> C 2
Pinb.4 -> Taster1
Pinb.5 -> Taster2
Portb.6 -> F 2
Portb.7 -> A 2

Portc.0 -> D 2
Portc.1 -> E 2
Portc.3 -> C 1
Portc.4 -> D 1
Portc.5 -> E 1

Portd.0 -> G 1
Portd.1 -> F 1
Portd.2 -> A 1
Portd.3 -> B 1
Portd.4 -> G 2
Portd.5 -> B 2

Wer in drei Teufels Namen hat die Schaltung designt :banghead: Die Anzeigen und Taster sind kunterbunt auf die Ports verteilt. Man kann zwar viel mit Software ausgleichen aber man kann sich auch Ringe durch die Nase ziehen :p :stoned:

Man hätte so schön einfach ein Segmentmuster definieren können und das mal eben auf nem Port ausgeben können. Tja ... so wird das wohl ein elendiges Bitgepopel werden.

Naja ... ich geh jetzt erstmal in die waagerechte ... :sleep:
Ich wünsche den anderen noch viel Spaß beim Bitpopeln :cool:

Gruß
Dino
 
Mit Portb.4=1 schaltest Du den Pegel des Beines quasi high, da dieses (noch, default) Eingang ist, wird effektiv ein Pullup vom Bein nach Vcc geschaltet. Das Bein ist also über den Pullup (ca 50KOhm) auf Vcc, wird der Taster gegen Gnd geschlossen, geht das Bein auf Gnd, was im Controller ausgelesen werden kann (PIN-Register)

Hast Du Dir mal das Datenblatt des Mega8 gezogen? Schau mal ab Seite 52

Zum Programm: hmm - ziemlich ... aufgebläht?!?
 
...Das Programm ist ... naja ... es wird schwierig so eine einfache Sache noch komplizierter zu programmieren :rolleyes:
Ich schmeiß mich weg... Du hast es natürlich mal wieder viel treffender formuliert...
...Wer in drei Teufels Namen hat die Schaltung designt :banghead: Die Anzeigen und Taster sind kunterbunt auf die Ports verteilt. Man kann zwar viel mit Software ausgleichen aber man kann sich auch Ringe durch die Nase ziehen :p :stoned:

Man hätte so schön einfach ein Segmentmuster definieren können und das mal eben auf nem Port ausgeben können. Tja ... so wird das wohl ein elendiges Bitgepopel werden.
Nunja, es handelt sich ja um irgend'n UNI-Projekt, wenn man den Kram halbwegs Intelligent sortieren würde (dürfte), wären die ganzen dollen Unterprogramme ja überflüssig;)
 
Also das Datenblatt sagt mir leider wenig....
Das ist alles neu für mich, sei es "high setzen" oder noch schlimmer das Datenblatt...

Deshalb benötige ich erstmal einen Einstieg.....
Das Ding ist, es wird mich nur kurzzeitig beschäftigen, daher ist die Motivation sich einzuarbeiten eher gering..... Deshalb folge ich der Regel so wenig wie möglich und so viel wie nötig....

Nichts desto trotz muss ich eine Prüfungsleistung abgeben und ein die beinhaltet unter anderem ein Programm....

Ich habe mir das so vorgestellt, dass ich einen Aufbau mit einem LCD-Display habe, dieses soll unterschiedliche Matheaufgaben im zweistelligen Bereich Anzeigen (+;-;*;/)
Demnach brauche ich Kenntnisse um dies zu realisieren....
:eek:
 
Hi,

Nichts desto trotz muss ich eine Prüfungsleistung abgeben und ein die beinhaltet unter anderem ein Programm....
... wieviel Zeit steht denn zur Verfügung? Sag jetzt nich eine Woche ;)

Was ist es denn für nen Studiengang?

Ich habe mir das so vorgestellt, dass ich einen Aufbau mit einem LCD-Display habe, dieses soll unterschiedliche Matheaufgaben im zweistelligen Bereich Anzeigen (+;-;*;/)
Demnach brauche ich Kenntnisse um dies zu realisieren....
:eek:
hmmmm :confused: wie soll ichs sagen ... wird mit dem geringen Grundwissen wohl etwas länger dauern.
Und ach ja ... wo willst du das LCD neben den beiden 7Segment noch anschließen?
Wie willst du mit 2 Tastern nen Taschenrechner bauen?

Ne Eieruhr oder Küchenwecker wäre einfacher.

Beim Datenblatt hab ich auch nur an die erste Seite mit der Segmentdarstellung gedacht (A,B,..,G)

Gruß
Dino
 
:D
Nein ich habe ca. 6 Wochen Zeit...
Ja dafür muss eine neue Schaltung her....
Diese war nur zum Üben :stoned:
Aber da bekommen wir Hilfe...
Der Studiengang ist im Bereich technischer Bildung, wir sollen den Schülern irgendwann mal technisches Wissen vermitteln. Dumm ist nur, dass es ein sehr breit gefächerter Bereich ist, und so ein Thema dann nur innerhalb von 12 Wochen angeschnitten werden kann....

Also gibt es irgendwelche Ideen....
Seht mich einfach so als hätte ich gar keine Ahnung und das ober beschriebene Ziel mit dem LCD Display.... Was sollte ich tun ?
 
Nein ich habe ca. 6 Wochen Zeit...
Naja ... OK ... Puh

Ja dafür muss eine neue Schaltung her....
Diese war nur zum Üben :stoned:
Wenigstens etwas :cool:

Aber da bekommen wir Hilfe...
Kommt drauf an wieviel der Helfer selber weiß :p

Der Studiengang ist im Bereich technischer Bildung, wir sollen den Schülern irgendwann mal technisches Wissen vermitteln. Dumm ist nur, dass es ein sehr breit gefächerter Bereich ist, und so ein Thema dann nur innerhalb von 12 Wochen angeschnitten werden kann....
Also nur nen Lückenfüller :rolleyes:

Also gibt es irgendwelche Ideen....
Seht mich einfach so als hätte ich gar keine Ahnung und das ober beschriebene Ziel mit dem LCD Display.... Was sollte ich tun ?
Tja ... dann werden 6 Wochen mit Arbeit und Lesestoff auf dich zukommen da neben dem Programmieren auch das elektrische Zeugs rüberkommen muß :p Sag schonmal die Wochenend-Feten ab :hahaha: und friß dich mal etwas durch den FAQ-Bereich hier im Forum.

Da das bei nem Forum mit dem hin und her der Beiträge etwas schwieriger ist als wenn da einer neben dir sitzt. Also wird es etwas länger dauern. Kommt aber auch ganz auf dein Auffassungsvermögen an. Also wie schnell du Sachen kapierst.

Nun aber ... :vollkommenauf: :boring: :sleep:
 
Komme grad noch nicht so zur Ruhe ... darum nochmal kurz ...

Du mußt erstmal die Hardwareplanung machen.

Taster: Du brauchst 0..9 + - * / = C
Das sind also 16 Taster. Entweder du machst die in einer 4x4 Matrix oder direkt jeder Taster an einem Pin. Bei der Matrix mußt du noch ne Umsetzung machen von der Tastennummer zur Funktion. Bei Taster pro Pin wäre das eventuell etwas besser für einen Anfänger zu durchblicken. Matrix braucht nur 4x4 = 8 IO-Pins. Alles einzeln benötigt 16 IO-Pins.

Das LCD benötigt mindestens 6 IO-Pins wenn du es im 4Bit-Betrieb anschließt.

Damit wären schonmal 8 + 6 = 14 IO-Pins als absolutes Minimum weg.

Ich würde dir die einzelnen Taster empfehlen und nen 40poligen Mega um alles unterzubringen. Das wäre nen Mega16, Mega32, Mega8535, ... oder vergleichbar. Sieh mal in der FAQ nach den pinkompatiblen Atmels.

Dann solltest du zuerst mal das LCD zum laufen bringen "Hello World".

Nimm AUF KEINEN FALL ein Grafik-LCD !!! Das sieht zwar Cool aus aber wird dir bei der Aufgabe das Genick brechen.
Nimm ein Character-LCD mit HD44780 Controller oder kompatiblem. Also sozusagen "Industriestandard".
Dazu gehört auch nen Poti für die Kontrasteinstellung.

Du brauchst auch eine stabile Spannungsversorgung und entsprechende Anzahl an Kondensatoren an den richtigen Stellen. Die Kondensatoren sind kein schmückendes Beiwerk sondern haben ihren Sinn.

Pack die Taster an zwei Ports. Zum Beispiel 0-7 an PB0..7 , 8-9 + - * / = C an PC0..7.
Sortier also deine Pheripherie an den IO-Pins damit du es beim Programm einfacher hast es zu programmieren und zu verstehen.

Ob du deinen Rechner nun 2stellig rechnen läßt oder 10stellig ist eigentlich nebensächlich. Das macht nicht wirklich mehr Arbeit. Mal ein kleiner Gedankenanstoß.
Du benötigst zwei Rechenregister. X + Y (sieh dir mal nen richtigen Taschenrechner an).
Deine Zahl gibst du in X ein. In Y landet das Ergebnis.
Wenn du ne Zahlen-Taste drückst und X bereits >0 ist, dann multipliziert du erstmal X mit 10 und addierst dann den Tastenwert drauf. Damit kannst du dann Stelle für Stelle eingeben.

Willst du den Taschenrechner mit normaler Notation oder mit UPN laufen lassen?

Soweit erstmal.

Nun aber ...
 
Also das Datenblatt sagt mir leider wenig....
Das ist alles neu für mich, sei es "high setzen" oder noch schlimmer das Datenblatt...
Das galt wohl eher dem von mir erwähntem Mega8-Datenblatt und so.

Du hast es hier mit Digital-Elektronik zu tun, es gibt 2 Zustaände: an/aus, high/low, Betriebsspannung/Gnd... "1"/"0"
Für jedes Bein (I/O-Bein, aber da kommen jetzt vielleicht auch wieder Fragen) gibt es 3 Bits (in 3 Registern), mit denen Du das Bein auswerten bzw manipulieren lassen kannst.

Im PIN-Register-Bit ist immer der aktuelle ist-Zustand des Beins auslesbar
Im DDR (Data Direction Register) wird (oh welch Überraschung) die Datenrichtung des Beines festgelegt (1=Ausgang, 0=Eingang)
Das PORT-Register-Bit legt dann Quasi den Pegel des Beines fest, beim Ausgang high/low (1/0), beim Eingang ist der Pin intern entweder unbeschaltet (0) oder über den internen Pullup-Widerstand mit der Betriebsspannung verbunden..
Ich wage lieber nicht zu fragen, ob Du das in Figure22 im Datenblatt so nachvollziehen kannst, Dino hatte es hier im FAQ schon mal erläutert.

Dino, ich habe mir mein ganzes rudimentäres Wissen bezüglich Elektronik, Mikrocontrollerprogrammierung und so (abgesehen vom schulischen Grundwissen) quasi autodidaktisch (was natürlich das Forum im wesentlichen miteinbezieht) angeeignet. Innerhalb der letzten 10-15 Jahre - Bascom nimmt da zwar 'ne Menge ab, was Hintergründe angeht, aber von Null beginnend in 6 Wochen ...

Wenn'se "Hilfe" bekommen, und vielleicht 'ne neue vorgegebene Schaltung, bekommen sie aber vielleicht auch entsprechende Bibliotheken (ähnlich den dollen Subroutinen hier) - Du kannst ja mit Hochsprachen (und geschenkten Schaltungen) auch Sachen programmieren, ohne auch nur die Bohne zu verstehen, was da so passiert.

Was ich dann allerdings mit gemischten Gefühlen sehe ist: letztendlich scheints ja hier um 'ne pädagogisch-technische Ausbildung zu gehen - wenn also später einer der Schüler mal konkrete Hintergründe erfragt... erinnerst Du Dich noch an Deinen Kommentar mit den "BWL-Futzis" in meinem Vorstellungs.Thread...
 
Super...
Vielen Dank erstmal für eure Hilfe.
Ich werde mal schauen wie weit ich komme und euch auf dem Laufenden halten.

:dirol:
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)