Lauflicht im BASCOM

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 25 11 2024  11:34:03      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Lauflicht im BASCOM

    







BID = 823553

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus
 

  


Hallo Leute,

bin gerade dabei, mich etwas mit BASCOM auseinander zu setzten. Zu diesem Zweck wollte ich ein kleines Lauflicht programmieren.
Dies klappt allerdings nicht wie gewünscht.

Es soll (so wie man sich das eben vorstellt) eine LED nach der anderen aufleuchten und die zuvor leuchtende LED wieder erlöschen.
Was passiert ist aber, dass alle nacheinander aufleuchten (und auch weiter leuchten) und dann alle der Reihe nach ausgehen.

Sieht zwar ganz nett aus - soll so aber nicht sein.

Le programme:



Code :


$regfile = "attiny2313.dat"
$crystal = 4000000

'Ausgangspins festlegen
Config Pind.0 = Output
Config Pind.1 = Output
Config Pind.2 = Output
Config Pind.3 = Output

'Pull-Up Widerstände abschalten
Pind.0 = 0
Pind.1 = 0
Pind.2 = 0
Pind.3 = 0

'Variablennamen für die Ausgänge
Led1 Alias Pind.0
Led2 Alias Pind.1
Led3 Alias Pind.2
Led4 Alias Pind.3


Do

Led1 = 1
Waitms 50
Led1 = 0
Led2 = 1
Waitms 50
Led2 = 0
Led3 = 1
Waitms 50
Led3 = 0
Led4 = 1
Waitms 50
Led4 = 0

Loop



Könnt ihr mir bitte mitteilen, wo der Fehler liegt.
...wohl an meinem Pseudo-Code


MfG Mathias


_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 823562

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  

Ich verwende Bascom zwar nicht, und sehe auch nicht, weshalb sich dein Program wie ein Johnson-Zähler verhält, zumal dein Programm ja weitestgehend diesem hier http://www.rn-wissen.de/index.php/B.....alten entspricht.

Der Code allerdings, den du als "Pull-Up Widerstände abschalten" bezeichnest, dürfte falsch sein.
Zum einen ist er überflüssig, da der Pullup hardwaremäßig automatisch abgeschaltet wird, wenn du einen Pin als Ausgang konfigurierst, aber außerdem sprichst du damit ja nicht ein Konfigurationsregister, sondern den Ausgang an, genau so, wie du es etwas später beim Schalten der LEDs machst.

P.S.:
Ich weiß nicht, wie Funktion waitms implementiert ist.
Möglicherweise verursacht sie einen Programmabsturz, weil du den Stack nicht initialisierst.
Ich bin zwar der Meinung, daß der Compiler das defaultmäßig erledigen sollte, aber wie gesagt vewende ich kein Bascom, sondern habe mittels Assembler lieber selber die Kontrolle über die Programmstruktur und die verwendeten Maschinenbefehle.



[ Diese Nachricht wurde geändert von: perl am  3 Apr 2012  3:11 ]

BID = 823566

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo,

Deine Aliase sind, wenn BASCOM sich ans Datenblatt hält, falsch, sie müssen statt LedN Alias Pind.N LedN Alias Portd.N heißen.
Das Register, was mit PIN(x) bezeichnet wird, dient zum Lesen!
(steht auch alles im Datenblatt, deshalb kann ich von BASCOM nur abraten, das ist käse).

@perl

Zitat :

Zum einen ist er überflüssig, da der Pullup hardwaremäßig automatisch abgeschaltet wird, wenn du einen Pin als Ausgang konfigurierst, aber außerdem sprichst du damit ja nicht ein Konfigurationsregister, sondern den Ausgang an, genau so, wie du es etwas später beim Schalten der LEDs machst.

Ja, Pullups abschalten ist hier blödsinnig.

Wird ein IO-Pin aber als Eingang definiert, kann man über das korrespondierende Bit im PORT-Register den Pullup an- (Bit=1) oder ab- (Bit=0) schalten.

Also:
PORTD(1) ist Ausgang:
DDRD(1) <- 1

PORTD(1) ist Eingang und Pullup soll aktiviert werden
DDRD(1) <- 0
PORTD(1) <- 1

Es gibt noch ein globales Register, wo man alle Pullups auf einen Schlag abschalten kann.

P.S.:
Es gibt saubere Wege, ein Lauflicht zu schreiben, praktisch jeder Prozessor kann Bits schieben. Auch die Operationen 'Mal 2' und 'Geteilt durch 2' können dazu benutzt werden, wenn man bei vorzeichenlosen Integern bleibt und der Compiler so intelligent ist, dass er für Zweierpotenzen optimierten Code (=Schiebeoperationen) statt Softwaremultiplikation erzeugt. Bei BASCOM bin ich mir da nicht so sicher.

_________________


[ Diese Nachricht wurde geändert von: DonComi am  3 Apr 2012  3:58 ]

[ Diese Nachricht wurde geändert von: DonComi am  3 Apr 2012  4:06 ]

BID = 823568

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Offtopic :

Zitat :
Bei BASCOM bin ich mir da nicht so sicher
Nicht nur da!
Ich hatte vor Jahren mal ein Fortran-Programm für ein Rechenzentrum entwickelt und ausgetestet, und es funktionierte völlig normal.
Als ich es dann dem Betrieb zur Verfügung stellen wollte, habe ich es zu guter Letzt noch durch den optimierenden Compiler geschickt und einen letzten Test damit gemacht.
Die Folge war, daß sich dieses optimierte Programm in der Maschine festbiß und sich auch vom Operator nicht mehr abschießen liess.
Auf diese Weise hat es stundenlang einen Teil des Großrechners blockiert, bis man abends die Maschine neu gebootet hat.
Das war reproduzierbar!

BID = 823576

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus


Zitat :
sie müssen statt LedN Alias Pind.N LedN Alias Portd.N heißen
Danke, genau das war der Fehler.

Mit PORTD.x ,x∈ℕ klappt es


Zitat :
Es gibt saubere Wege, ein Lauflicht zu schreiben
Die gibt es ganz sicher. Aber so war es für mich erst mal am logischsten.


Zitat :
deshalb kann ich von BASCOM nur abraten, das ist käse
Habe ich auch schon öfters gehört.
Im Ersten Semester haben wir mal C programmiert. Wäre es ratsam, sich da wieder reinzufitzen?
Ich vermute es mal stark...



_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 823627

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika


Zitat :

Ich vermute es mal stark...

C ist eine Sprache, der man fast überall begegnet, sei es bei der Treiberprogrammierung, Systemprogrammierung oder auch den meisten älteren Applikationen in Linux.

C wird noch lange in diesem Bereich der Quasi-Standard sein, auch wenn einige „Embedded Systems“ mittlerweile sogar in .NET programmierbar sind (Unsitte, läuft aber ganz gut).
Andere Systeme werden in herstellerspezifischer Sprache programmiert.


BASCOM ist zwar für diejenigen nett, die dem AVR schnell etwas beibringen wollen, aber es ist halt AVR-spezifisch und erzeugt nicht grad den besten Code.
Hinzu kommt, und das ist eigentlich mein Hauptkritikpunkt: die Sprache ist mit Schlüsselwörtern überladen, für jeden Mist gibt es feste Schlüsselwörter, obwohl es auch normale Prozeduren oder Funktionen täten.
Außerdem wird nunmal die meiste freie Software für AVRs in C programmiert.


Als Compiler bietet sich der GCC an, der für AVRs recht ordentlichen Code erzeugt, wobei man das mit bestimmt 60, 70 Kommandozeilenparametern sehr genau anpassen kann.
Der Vorteil, wenn man mit dem GCC arbeitet ist, dass man für unzählige andere Plattformen und Architekturen bauen kann. Die Software, die beispielsweise auf meinen größeren AVRs läuft, kann ich fast 1:1 für x86 unter Linux kompilieren, zumindest die Teile, die hardwareunabhängig sind.

_________________

BID = 824194

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus

So, habe mir jetzt mal AVR Studio 4 besorgt, und auch schon ein wenig rumprobiert.

Eine einfache Portansteuerung (Ausgabe des Zählerstandes eines Binärzählers) hat auch schon geklappt. Werde dann wohl bei C bleiben, und BASCOM vorerst vergessen (nicht dass es da viel zu vergessen gäbe )




_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 8 Beiträge verfasst
© x sparkkelsputz        Besucher : 182394994   Heute : 2190    Gestern : 7548    Online : 560        25.11.2024    11:34
7 Besucher in den letzten 60 Sekunden        alle 8.57 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0278251171112