Bascom Mini-Problem

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: 06 10 2024  12:25:19      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


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

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Bascom Mini-Problem

    







BID = 707180

freakypete

Neu hier



Beiträge: 37
 

  


Hallo!

Ich arbeite schon länger an einer LCD 7 Segment Anzeige.
Bisher funktioniert es hardwaremäßig sehr gut, doch mit der Software happerts bei mir.
Ich programmiere den Mikrocontroller Atmega8515 mit Bascom.
Jetzt zu meinem Problem: Ich benötige für LCD ja Phase. Also eine Rechtecksschwingung mit 50% duty cicle. Diese möchte ich mit dem Mikrocontroller erzeugen:


Code :

Porte.2 = 1

Waitms 50
Porte.2 = 0
Waitms 50


Wie kann ich diesen Code als Schleife parallel mit dem Hauptprogramm laufen lassen? Ist das überhaupt mit Bascom möglich?

L.G.
freakypete

BID = 707184

Kleinspannung

Urgestein



Beiträge: 13356
Wohnort: Tal der Ahnungslosen

 

  


Zitat :
freakypete hat am 11 Aug 2010 20:02 geschrieben :

Ich benötige für LCD ja Phase.

Wie meinen?
Phasen gibts wo anders,und meine LCD laufen ohne die mit Bascom.
Kannst einem doofem mal erklären was nun meinst?

_________________
Manche Männer bemühen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitätstheorie.
(Albert Einstein)

BID = 707186

Rafikus

Inventar

Beiträge: 4133

Und am besten ganz normal deutsch schreiben, wir verstehen das dann schon und es unterlaufen einem weniger Fehler in den englischen Ausdrücken.

Rafikus

BID = 707187

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Also eine Rechtecksschwingung mit 50% duty cicle.
Ist das denn ein LCD mit nur einer Backplane?
Bei mehr als 4 Stellen wird gerne gemultiplext und dann braucht man komplizierte Wellenformen.

[ Diese Nachricht wurde geändert von: perl am 11 Aug 2010 20:17 ]

BID = 707188

freakypete

Neu hier



Beiträge: 37

Nun ja. Ich hab kein fertig gekauftes/bestelltes LCD Board, sondern eine Anzeige, bei der für jedes Segment die Pins herausgeführt sind und einen LCD-Controller: CD4543. Dieser hat an Pin6 den Anschluss "Phase".
Der wird benötigt, um die Anzeige mit Wechselstrom zu versorgen, damit diese nicht kaputt geht (Elektrolyse).
Möchteb also diese Rechtecksschwingung direkt mit dem Mikrocontroller erzeugen.

BID = 707195

Her Masters Voice

Inventar


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 5308
Wohnort: irgendwo südlich von Berlin

wie du schon geschrieben hast geht das Display kaputt wenn dieser Takt nicht stimmt. Hast du einen Controller der NIE abstürzt? Wenn du einen Solchen hast, dann löst man sowas nicht mit Delays sondern mittels Timer und Interrupt. Dann ist der Rechenknecht nicht mit Vollzeitwarten beschäftigt sondern kann auch noch andere Aufgaben erledigen.

_________________
Tschüüüüüüüs

Her Masters Voice
aka
Frank

***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************

BID = 707201

freakypete

Neu hier



Beiträge: 37

Danke für den Tipp.
Der Controller ist mir bisher noch nie abgestürzt. Aber vermutlich auch deshalb, weil ich noch nichts umfangreicheres programmiert habe. Auch dieses Programm soll nur ganz simpel sein. Kannst du mir, da ich mich so gar nicht auskenne ein ganz kurzes Beispielprogramm schreiben? Wäre dir dafür wirklich sehr dankbar!

BID = 707208

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

Du brauchst auch nicht jedesmal eine eigene Warteschleife davor, denn dann besteht die Gefahr, dass das Signal unsymmetrisch wird, wenn der Prozessor sich anschliessend eine Zeitlang im Hauptprogramm aufhält.

Einfacher und genauer ist es das PortBit im Kopf der Hauptschleife nur umzupolen und dann evtl. noch etwas zu warten, falls die Hauptschleife sonst zu schnell durchlaufen wird.


[ Diese Nachricht wurde geändert von: perl am 11 Aug 2010 21:05 ]

BID = 707228

freakypete

Neu hier



Beiträge: 37

OK. Ich danke euch vielmals für die Hilfe!
Nun denke ich dass ich das hinbekomme.

Nochmal dickes Dankeschön

BID = 707246

Nukeman

Schriftsteller



Beiträge: 754
Wohnort: bei Kleve

Ergänzend zu Perls Vorschlag: Am besten dazu im Programm-Kopf darauf warten,
dass ein Timer überläuft, dann sollte das mit dem 50% Duty-Cycle genau genug
klappen und man kann auch bequem eine definierte Frequenz vorgeben.
Danach Timer ggf. neu laden, Timer-Overflow-Flag löschen und wieder weiter im
Programm.

Gruß
Stefan

BID = 707272

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

Fortgeschrittene verzichten aber auf einen Decoder wie den CD4543 überhaupt und lassen statt dessen den µC die Decodierung machen.
Ausgabe dann über ein Schieberegister wie den CD4094.

Das hat den Vorteil, dass man nur 3 Pins des µC für Displays mit beliebig vielen Stellen braucht, und dass man überdies auch jedes beliebige Bitmuster im Display darstellen kann, z.B. 'Error'. Mit dem Decoder geht das nicht.
Ausserdem erleichtert es das Layout der Schaltung, weil man nicht mehr festgelegt ist, welcher Ausgang des SR an welchem Segment des Displays landet. Die Software kann das ja beliebig positionieren.

Die Wechselspannung erzeugt man einfach dadurch, dass man bei jeden Durchlauf der Hauptschleife das Bitmuster, welches in das Schieberegister geladen wird, invertiert.
Ein Bit, welches zwar ins SR geladen, aber nicht dargestellt wird, entspricht dabei einem niemals leuchtenden Segment und erzeugt das Signal für die Backplane.


[ Diese Nachricht wurde geändert von: perl am 11 Aug 2010 23:53 ]

BID = 707274

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Moin,

Es gibt auch die Möglichkeit, einen Timer in den CTC-Modus zu versetzen und die Kontrolle über den OCn-Pin der Timerhardware zu überlassen.

Damit kann man Frequenzen per Hardware erzeugen und es ist fortan überhaupt nicht mehr nötig, sich um irgendwelche Timings zu kümmern.

Siehe dazu im Datenblatt die Sektion "Output Compare Unit" und suche nach "Clear Timer on Compare".



_________________

BID = 707384

freakypete

Neu hier



Beiträge: 37

Wow, da sind ja wieder einige Vorschläge dazugekommen!

Ich habe mir jetzt das mit dem Timer und Interrupt genauer angeschaut und schon probiert. Hier mein Code:


Code :

$regfile = "m8515.dat"

$crystal = 1638400

Config Portc = Output
Config Porte = Output
Config Timer0 = Timer , Prescale = 64

Enable Timer0
On Timer0 Isr_von_timer0
Enable Interrupts
Load Timer0 , 100

Do

Portc.0 = 0
Portc.1 = 0
Portc.2 = 0
Portc.3 = 1

Loop
End

Isr_von_timer0:
Load Timer0 , 100
Toggle Porte.2

Return



Damit erscheint auf dem Display auch schon eine satte 8.
Nun aber Zeitverzögerungen im Hauptprogramm:



Code :

Portc.0 = 1

Portc.1 = 0
Portc.2 = 0
Portc.3 = 1
Wait 1
Portc.0 = 0
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0
Wait 1




Hiermit sollte im Sekundentakt zwischen 0 und 1 gewechselt werden. Tut es aber nicht. Es dauert nämlich ca. 1,7 Sekunden.

Und zuallerletzt komplette Verwirung bei mir
Mit einer Soudcard Oszillograph-Software habe ich mir die erzeugte Welle am Ausgang angesehen. Siehe Bild. Die Frequenz ist angeblich rund 20 Hz und nicht die von mir berechneten 50 Hz. (1638400/64)/256 = 100. Also jede 1/100 s sollte porte.2 getoggelt werden...

Woran könnte das denn liegen? Oder ist diese Oszillograph-Software nicht ernst zu nehmen? Denn die Ziffer ist gut erkennbar.

BID = 707387

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Die Frequenz ist angeblich rund 20 Hz
Das ist aber ein guter Wert fürs LCD.

Deine Frequenzmessung kannst du leicht überprüfen, indem du ein bischen Brummspannung einspeist. Evtl reicht es den Finger auf den Kontakt des Mikrofoneingangs zu legen.
Da sollten dann genau 50Hz angezeigt werden

BID = 707389

freakypete

Neu hier



Beiträge: 37

Stimmt, es werden wenn ich den Finger auf den Kontakt lege genau 50 Hz angezeigt.
Zitat :
Das ist aber ein guter Wert fürs LCD.

Na dann ist ja gut!
Nur wie steht es mit der Welle? Sieht nämlich nicht so aus wie eine Rechtecksschwingung! Kanns sein, dass die Spannung nicht gehalten werden kann und abstürzt? Wo könnte dann der Auslöser dafür liegen?

@DonComi: Welches Datenblatt meinst du?


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
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 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 182133671   Heute : 2040    Gestern : 5445    Online : 541        6.10.2024    12:25
6 Besucher in den letzten 60 Sekunden        alle 10.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.18014383316