mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programm geschwindigkeit: Bascom


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mal ne Frage an alle Bascom Kenner:
Warum ist Bascom so langsam????

Hab ein Programm geschrieben, welches eigentlich auch recht gut
funktioniert - eiziges problem ist nur es reagiert so extrem langsam
......

Woran liegt das?

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
wahrscheinlich liegt's an dir. bascom ist garnicht so langsam, es mag
sein, dass der compilierte code nicht so optimiert ist wie wenn du's
gleich in assembler schreibst, aber das, was in den prozessor geladen
wird ist ordinärer maschinencode. anders als in manch anderen systemen
wie basic-tiger oder c-control in denen ein interpreter werkelt,
gelangt in einen avr alles andere als basic-quellcode.
ergo dürfte es am programm selbst liegen, lass halt mal die ganzen
wait's weg, dann wird's schon hurtiger werden.
gruss und fröhliches proggen noch, harry

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bascom ist nicht so langsam.....
meist hängt es am Programmierer
Rennt dein AVR überhaupt mit der Frequenz
wo du denkst ?
vielleicht sind deine Fusses falsch gesetzt ...

Gruß HansHans

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also hab nen 8535 und nen szillator mit 4Mhz
die Funktion soll wie folgt reagieren:

Wenn ich den Taster nicht betätigt ist (also auf Low) soll kein
einziges LED leuchten.
Wenn ich jetzt den Taster gedrückt HALTE dann soll ein LED nach dem
anderen angehen ...... wenn er losgelassen wird sollen natürlich wieder
alle sofort ausgehen unabhängig davon wieviele LED gerade leuchten.

hatte schon versucht das ganze mit entprellung (auch entprellzeit wurde
geändert) und ohne zu versuchen hat aber auch nicht funktioniert.
wie gesagt die schaltung funktioniert ja auch nur reagiert sie extrem
langsam.
D.H. jetzt bin ich am taster das erste led geht an ich lasse los, und
noch bevor er wieder abschaltet, schafft ers noch das zweite led
einzuschalten (und es ist aber immer ne sek zwischen den
"einschalt"vorgängen .......

weiß jedenfalls nicht was so falsch am programm ist

Autor: Erik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste mal den Code... Können ja nicht hellsehen :-)

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nagut hier mal der code. muss nur eines noch dazu sagen
habe die ports auf high gesetzt, weil ichs so wie im forum beschrieben
damals zusammengelötet habe, und da ist eben jetzt mein 1 signal (also
"high") auf "0"! und mein "low" signal ist "1"

$regfile = "8535def.dat"
$crystal = 4000000

Config Portb = Output
Config Portd = Input

Portd = &B11111111
Portb = &B11111111

Do

If Pind.0 = 1 Then
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
End If

If Pind.0 = 0 Then
Portb.0 = 0
Wait 1
Portb.1 = 0
Wait 1
Portb.2 = 0
End If

Loop

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der schafft sogar alle 3 leds noch anzumachen aber die letze so kurz,
dass du es nicht mehr siehst. du prüfst nur am anfang einer blink
sequenz einmal den taster danach läuft die IMMER komplett durch. wenn
du das nicht mit ints machen willst (nch nicht kannst) füge vor jedem
portb.x = 0 eine if abfrage ein und schon klappts

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du so gemeint:

Do

If Pind.0 = 1 Then
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
End If


If Pind.0 = 0 Then Portb.0 = 0

If Pind.0 = 0 Then
Wait 1
Portb.1 = 0
End If

If Pind.0 = 0 Then
Wait 2
Portb.2 = 0
End If

Loop

funktioniert auch nicht so schnell wie ichs mir erhoffe - möchte ja das
sofort aus ist sobald ich loslasse ....

was meinst du mit ints? - erklär mir das mal näher bitte -> fange ja
erst an mich mit bascom zu beschäftigen - lauflichter und normale
schaltungen hatte ich bis jetzt auch recht gut geschafft. mit dim x as
byte zb .....

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi ;)


"....(und es ist aber immer ne sek zwischen den
"einschalt"vorgängen .........."

und

"If Pind.0 = 0 Then
Wait 1
Portb.1 = 0
End If"

Was passt da nicht? :D

Schon klar, dass er eine Sekunde zwischen den Vorgängen wartet, wenn du
es auch so programmierst

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist nicht die Lösung !
aber es baut auf deinen Code auf und sollte dir
neue Fehler in deinem Codeansatz aufzeigen......
(wenn ich dein Wunschverhalten richtig verstanden habe)
$regfile = "8535def.dat"
$crystal = 4000000

Config Portb = Output
Config Portd = Input

Portd = &B11111111
Portb = &B11111111

Dim I As Byte

Do

If Pind.0 = 0 Then
Portb.0 = 0
Gosub  Pause
Portb.1 = 0
Gosub Pause
Portb.2 = 0
Gosub Pause
End If

Loop

Pause:
For I = 0 To 100
 If Pind.0 = 1 Then
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
End If
Waitms 10
Next I
Return

End

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja ich "will" wenn ich den taster loslasse, dass sofort alles aus
ist ohne verzögerung - das tut es aber nicht sagen wir ich bin am
taster, das erste led geht an, ich gehe runter vom taster und erst nach
einiger zeit geht die led wieder aus .....

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Momentchen, wie wärs denn damit?


i = 0

Do

If Pind.0 = 0 Then Portb = 0

If Pind.0 = 1 Then
Portb.i = 1
i = i + 1
if i = 8 then i = 0
wait 1
End If

Loop

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm ups, hatte was vergessen:


i = 0

Do

If Pind.0 = 0 Then
Portb = 0
i = 0
End if

If Pind.0 = 1 Then
Portb.i = 1
i = i + 1
if i = 8 then i = 0
wait 1
End If

Loop

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-->und erst nach einiger zeit geht die led wieder aus .....

Logo, hast du ja so Programiert.....
das hat nix damit zu tun das Bascom „zu langsam“ ist

@Simon... Willst du Ralf ärgern ?

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
??? wieso hab ich so programmiert? ich glaub zumindest g das ichs
programmiert hab das die nächste led nach ner sek angeht.
aber ich hab ja auch geproggt das alles aus ist wenn der taster
nichtmehr betätigt ist - aber ohne verzögerung .....

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso ? Wo ist das Problem..

Hm. du meinst, wenn ich jetz Pind.1 drücke und dann loslasse, dauert es
immernoch eine Sekunde ? Hm, könnte wirklich passieren. Würde da auch
eher zu Interrupts greifen oder hab ich wirklich was überlesen? ;)

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt versteh ich erstmal. 0 ist bei dir, wenn der Taster gedrückt ist
?

Hm, in der Hinsicht ist mein Programm wirklich Müll. Wie gesagt,
Interrupts helfen da abhilfe

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf:
Wenn du Wait 1 einsetzt dann macht der AVR in der Sekunde nix,
 außer  Warten, soll heißen er schaltet auch keine LED aus

Simon:
Genau das meinte ich ....

Gute Nacht

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja genau mein "high" signal ist "0" also wenn gedrückt ist - ist
durch die verlötung passiert - muss selber immer bissi umdenken .....

g naja interrupts g wie gesagt bin "blutiger" anfänger
und im tut kappier ich auch nicht ganz was jetzt mit den interrupts
gemacht werden kann ..... :-(

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aha .... und wie schaffe ich´s sonst nen zeitintervall rein zu kriegen
aber das er am taster sofort reagiert ????
also außer mit interrupts - weil das tut versteh ich nicht ganz

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-->also außer mit interrupts


z.B. Nicht eine Lange sonder viele kurze Pausen
s.Oben

Pause:
For I = 0 To 100
 If Pind.0 = 1 Then
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
End If
Waitms 10
Next I
Return

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm .... ja was soll das eigentlich bewirken: For I = 0 To 100


und wozu Next I ? ich will ja nicht das es die leds durchschaltet ...
oder hab ich das jetzt falsch verstanden?

Autor: HansHans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Worte........

1. Bascom Hilfe: For I oder Next
2. 100 x 10ms sind 1000ms und das ist 1 Seckunde
3. Ich schlafe schon ..

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

du musst einfach in jeder 2te Programmzeile die Taste überprüfen, damit
das gleich reagiert

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.