LED-Matrix: Hilfe bei Änderung eines C-Programmes

rally

Neues Mitglied
07. Aug. 2009
2
0
0
Sprachen
Hi,

ich habe mir eine 7x20 LED-Matrix nach der Anleitung von avrprojects gebaut. (Schaltplan siehe Anhang)
Als mC setze ich einen Atmega8 ein, welchen ich mit dem Bascomcode aus der Anleitung gefüttert habe. Die Schaltung lief einwandfrei und auch die Ansteuerung funktionierte, allerdings wird in der Anleitung ein 20MHz (der Arme mC) Quarz verwendet und ich hatte nur einen 14,318MHz Quarz zur Verfügung. Daraus folgte, dass meine Anzeige leicht flimmerte und ich habe mich im Netz auf die Suche nach einem anderen Programm begeben und bin auf: instructables gestoßen. Das C-Programm (im Anhang) läuft wesentlich besser und bietet auch mehr Funktionen als das Alte, jedoch ist es nur für maximal 16 Spalten (2 kaskadierte 8bit Schieberegister) ausgelegt und ich habe leider keine Ahnung was ich in dem Programm umschreiben muss, damit es auch mit mehr als 16 Spalten arbeitet. Ich habe auch schon den Autor des Programmes angeschrieben, allerdings habe ich auch nach einer Woche keine Antwort erhalten. :(

Aufgrund der schönen Quellcodedokumentation gehe ich davon aus, dass sich der zu ändernde Teil auf Zeile 108-125 beschränkt. Es wäre schön, wenn mir jemand erklären könnte wie die Kaskadierung der Schieberegister funktioniert und wie ich das Programm abändern muss, damit ich mehr Schieberegister (Spalten) verwenden kann.

Dazu muss ich noch sagen das ich mich erst seit einigen Monaten mit mC befasse und ich noch keine Programmiersprache kann (bin aber am C lernen).

Ich hoffe das ich jetzt alles nötige gesagt habe. Falls euch weitere Informationen fehlen, einfach nachfragen. ;)

Schon mal vielen Dank im Vorraus.

mfg rally
 

Anhänge

  • main.c
    10,1 KB · Aufrufe: 32
  • dot_matrix_display_sch.jpg
    dot_matrix_display_sch.jpg
    114,5 KB · Aufrufe: 63
Hallo Rally,

hast Du den BASCOm-Code entsprechend auf Deine 14 MHz angepasst oder hast Du dir originale Version für die 20 MHz einfach nur mit 14 Laufen lassen. Dann könnte ich mir schon vorstellen, dass es flimmert.
14 MHz soltlen aber auch für eine Flimmerfreie Darstellung ausreichen.

Schick mir doch mal Deinen 14 MHz bzw 20 MHz Code und ich schau mal rein was sich machen lässt. Sollte nämlich auch mit BASCOM funktionieren.

Grüße,
Markus
 
Hallo ,

das sieht nach genau so einer Schaltung aus, wie ich sie hier ...
7-Segment-Display Beispielschaltung Multiplex (z.B. für Uhren)
für die Datums/Tages-Anzeige druntersetzen möchte. Die 20 Displays
liegen schon bei mir zuhause. Nur die Zeit hat bis jetzt gefehlt.

Also mit 14MHz sollte das überhaupt kein Problem sein.

20 Anzeigen x 5 Pixel = 100 Pixel (100 Bit)

ich rechne mal ganz großzügig mit 40 Takten pro Bit ...

40 x 100 = 4000 CPU-Takte

14MHz => 71ns pro Takt x 4000 = 284µs pro Zeile

bei 7 Zeilen (5x7 Matrix) sind das 7x284µs = 1988µs -> ca 2ms

Wenn man also nix anderes reinprogrammiert sollte man ohne
Probleme eine Wiederholrate von 500Hz schaffen :D

Also, wo liegt das Problem ? ... Im Programm ;)

Grruß
Dino
 
Danke schon mal für die schnellen antworten. Ihr seid echt fix!

Im Anhang ist der orginal BASCOM Code. Ich hatte meinen leider nicht mehr gefunden.
Soweit ich mich noch entsinnen kann, habe ich nur den Kommentarstrich vom "$crystal" entfernt (ohne Quarz), und mit dem Takt gespielt, allerdings flimmerte das Display ganz stark und es änderte sich nichts durch die Taktänderung.
Dann hab ich verschiedene Quarze vorgeschalten (Fusebits entsprechend gesetzt) und bemerkt das es mit steigender Taktrate immer weniger flimmerte und sich langsam auch etwas auf dem Display etwas erkennen ließ.

Allerdings würde ich lieber beim C-Code bleiben, denn in der Schule befassen wir uns im Technik-Unterricht im Moment mit Roboterprogrammierung in C++. Von daher wär das mit C schon ganz praktisch. ^.^ Aber wenn es zu viele Umstände macht nehme ich auch mit BASCOM vorlieb.

mfg rally
 

Anhänge

  • dot matrix display 4digit M8v1.bas
    11,4 KB · Aufrufe: 29
@rally:
Etwas arg spät (bin erst kürzlich hier dabei):

Falls die Erweiterung des C-Programms noch aktuell ist - ändere mal in Zeile 57:

"#define TotColumns 15" in "#define TotColumns 19" (falls Du 20 statt 16 Spalten hast).

Ob das so genügt, lässt sich auf die Schnelle nicht sagen, aber einen Versuch ist's wert und der Kommentar des Autors sagt erstmal dasselbe. :cool:

Viel Erfolg,
mmi.
 

Ü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)