Moin moin,
so ich fange hier mal wieder ein Thema an, das glaube ich schon 1000 Mal
besprochen wurde, nur habe ich für mein problem noch nicht wirklich was
passendes gefunden!
Ich habe ein ATmega 32 und 3 MAX7219 die ich kaskadiert habe, möchte
damit drei Matrixen a 8x8 ansteuern, Schaltung ist klar, Matrix sowieso,
mein Problem ich muss das ganze in C schreiben habe bisher aber nur
Assemblercodes gefunden mit dennen ich nicht wirklich was anfangen kann,
hat hier irgendjemand sowas in C schon geschrieben und kann mir dabei
ein wenig weiter helfen, bin um jede ernstgemeinte Antwort dankbar!!!
s.
erstmal vielen Dank Udo,
hab beim linken aber einige Fehler:
Build started 19.3.2008 at 14:50:44
avr-gcc.exe -mmcu=atmega32 -Wall -gdwarf-2 -Os -std=gnu99
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP
-MT LED_Laufschrift.o -MF dep/LED_Laufschrift.o.d -c
../LED_Laufschrift.c
In file included from ../LED_Laufschrift.c:12:
c:/winavr-20071221/bin/../avr/include/util/delay.h:85:3: warning:
#warning "F_CPU not defined for <util/delay.h>"
../LED_Laufschrift.c: In function 'test_Init':
../LED_Laufschrift.c:58: warning: 'main' is normally a non-static
function
../LED_Laufschrift.c: In function 'main':
../LED_Laufschrift.c:64: error: 'tu' undeclared (first use in this
function)
../LED_Laufschrift.c:64: error: (Each undeclared identifier is reported
only once
../LED_Laufschrift.c:64: error: for each function it appears in.)
../LED_Laufschrift.c:64: error: expected ';' before 'was'
../LED_Laufschrift.c: In function 'test_Init':
../LED_Laufschrift.c:74: error: expected declaration or statement at end
of input
make: *** [LED_Laufschrift.o] Error 1
Build failed with 5 errors and 2 warnings...
Hallo Sebastian,
Der erste Fehler kommt daher das du deine F_CPU nicht definiert hast:
#define F_CPU 'deine Quarzfrequenz'
naja, " tu was " ist nicht unbedingt ein gültiger Befehl in C :)
War mehr als Platzhalter für dein restliches Programm gedacht....
kannst du ausklammern: //tu was....
Gruß
Udo
jetzt nochwas dummes, wo nem ich meinen clk ab, direkt am quarz den ich
vor dem mega32 hab oder gibts da noch nen ausgang den ich
durchschleifen muss???
ja nix, finds echt saugut das hier geantwortet wird und keine dummen
sprüche kommen wie man es besser machen könnte oder sonst was, war
positiv gemeint.
hab aber immernoch dumme fehlermeldungen, weis da fehlt nochwas im
programm aber das hängt damit glaub nicht zusammen
Build started 19.3.2008 at 19:50:37
In file included from ../LED_Laufschrift.c:12:
c:/winavr-20071221/bin/../avr/include/util/delay.h:85:3: warning:
#warning "F_CPU not defined for <util/delay.h>"
../LED_Laufschrift.c:14:1: warning: "F_CPU" redefined
c:/winavr-20071221/bin/../avr/include/util/delay.h:86:1: warning: this
is the location of the previous definition
../LED_Laufschrift.c: In function 'test_Init':
../LED_Laufschrift.c:58: warning: 'main' is normally a non-static
function
../LED_Laufschrift.c:74: error: expected declaration or statement at end
of input
make: *** [LED_Laufschrift.o] Error 1
Build failed with 1 errors and 4 warnings...
hab die cpu frequenz laut avr-gcc tutorial so definiert #define F_CPU
[10000000], sollte ja stimmen da ich die taktfrequenz in hertz angeben
muss sprich 10mhz= 10000000
Da fehlt ein }
void test_Init(void)
{
Load_Low();
for (int i = 0; i < 3; i++)
{
transmit(0x0C,0x01); // normal mode transmit(0x0C,0x01);
}
Load_High();
} // das hier
mahlzeit maenners,
melde mich wieder zurück war wegen einer notop meiner freundin, die
ihren blinddarm rausbekam etwas verhindert!!!
quellcode ist jetzt fehlerfrei, danke udo
...jetzt habe ich folgendes problem, das ich mein programm nicht in den
microcontroller laden kann, benutze den avrisp mkII programmer, bei dem
beide grünen ledsleuchten, also sollte da ja alles stimmen meine
frequenz zum isp liegt bei 1000khz, sollte also auch passen, was kan man
noch falsch machen, benutze das avr studio, hab mein hexfile erzeugt und
auch richtig ausgewählt,hmmm...hat irgendjeamnd ne antwort??
achso ich benutze einen ATmega32 16PU, hier sollte ich doch dann im
device einfach den ATmega32 auswählen, oder??
den isp, hab ich mit dem atmega folgendermassen verbunden, wie oben in
der tollen zeichnung, habe beim reset gegen 5V einen 10k ohm widerstand
drin, sollte doch auch passen, oder seh ich das alles falsch???
Hallo Sebastian,
bei Atmel gibt es folgende Info:
AVR ISP mkII fix:
AVRISP mkII programmers manufactured from 20071012 to 20080130 has a
missing parameter in the firmware. This causes the AVRISP mkII to not be
able to communicate with the target AVR. The AVRISP mkII can be fixed by
upgrading the firmware For procedure details see AVRISP mkII fix note.
Download upgrade package at
http://www.atmel.no/beta_ware/as4/AVRISPmkIIUpgrade.exe. ...
versuch es mal damit.
Gruß
Udo
moin udo,
habe die exe installiert gleiches problem, meinte dann auch das die exe
die ich von dir hab die 1.06 ist und ich die neuste installieren sollte
die 1.09, hab ich alles getan nichts verändert, das eeprom lässt sich
laden übers avr aber das flash nicht, mach ich da wat falsch???
hier wieder fehlermeldungen,hab zwei fotos gemacht, das zweite ist im
nächsten post, hab probleme mit dem flash, mach ich da irgendwelche
falschen einstellungen oder was ist das
das erste Bild sieht doch schon gut aus, der MKII wird scheinbar
erkannt.
Ins EEprom kannst du nichts brennen, weil du nichts hast was du ins
EEprom brennen kannst. Dein Code kommt komplett ins Flash.
Zeig mal das Bild der Ordner "Main" und "Fuses"
nochwas ich benutze eine ATmega32 16PU finde diesen baustein aber nicht
unter AVR studio, bringt da auch ne warnung, kann mein ganzes problem
damit zusammenhänegn???
also wenn ATmega32 auf der CPU steht ist auch eine drin :))
16 ist die max.Takfrequenz in MHz und P steht DIP-Gehäuse und U für
unlead, also bleifrei.
Wenn AVRStudio schon Fehlermeldungen bringt, würd ich erst mal da
schauen, gegebenenfalls gibt es da ein Update: www.atmel.com
also. die ganzen Bilder bringen nichts, da die CPU nicht richtig vom
AVRStudio erkannt wird. Würde da jetzt auch nichts umstellen an den
Fuses ect.
Erst mal schauen was mit dem AVRStudio ist.
...hmmm, was ich halt komisch finde ist das er im dem unteren fenster
vom main dann schreibt, signatur blablabla OK, und oben dann wieder
schreibt WARNING signature dos not match selected device??
du solltest dir hier:
http://www.atmel.com/dyn/products/tools_card.asp?family_id=607&family_name=AVR%AE+8%2DBit+RISC+&tool_id=2725
erst das runterladen und installieren:
AVR Studio 4.13 (build 528) (73 MB, updated 03/07)
dann dieses runterladen und installieren:
AVR Studio 4.13 SP2 (build 571) (45 MB, updated 12/07)
dann eventuell noch mal den USB-Treiber für den MKII und die Updates für
das MKII.
Wie deinstallierst du? hoffentlich über Start/Einstellungen/Software
logisch über software,
ich hab runtergeladen, das:
1. AVR Studio 4.13 (build 528
2. AVR Studio 4.13 SP1 (build 557)
3. AVR Studio 4.13 SP2 (build 571)
genau in der reihenfolge habe ich auch installiert, zuvor das winavr.
Moin!
Zu den Programmierproblemen:
Kann es sein, dass du die Software für einen anderen Prozessor als den
mega32 kompilierst? Das muss vorher noch an anderer Stelle eingestellt
werden. Habe gerade kein AVR-Studio zur Hand um den Pfad zu nennen. War
aber irgendwas mit "Konfiguration" (?).
Welcher Prozessor momentan ausgewählt ist kannst du auch im Makefile
angucken.
MfG
hmm,
also ich hab da schon den atmega32 eingestellt unter dem avr studio,
aber das blöde ist ja wie oben schon beschrieben, das er im unteren teil
des fensters meint signatur ist ok und oben sagt er mir was vonwegen
warning, signature dos not match selected device, man man kann es sein
das mein avrisp mkII einen schuss hat, das ist doch echt zum haare
verleiren, macht mich echt fertig, zumal ich ja gerade erst angefnagen
hab mit dem ganzen scheiss und dann am anfang gleich so probleme
s.
Die Fehlermeldung würde ja auf meinen Hinweis deuten. Du kannst die
Signatur des angeschlossenen mega auslesen. Ist ja auch ok. Wenn du nun
aber versuchen willst zu Flashen, sagt er dir, dass die Software nicht
für den AVR passt, dessen Signatur du ausgelesen hast.
Die Auswahl des Prozessors in dem Programmiermenü, von dem du oben die
Screenshots gemacht hast, ist was anderes als die Auswahl des Prozessors
für den compiler.
Guck dir mal das make-File an, das irgendwo in dem Projektordner sein
muss. Da steht drin für welchen AVR der Code kompiliert wird.
egal was ich ändern und übertragen will auch wenn es nur die fusebits
sind, bringt immer die gleiche fehlermeldung, wie oben schon eingefügt,
der isp stecker ist auch so beschaltet wie überall beschrieben, habe
oben auch ein bild eingefügt, habe eine 10k ohm gegen 5V am reset.
Hmm, daran kanns also nicht liegen.
Achso, ich sehe gerade, dass die Signatur doch nicht richtig gelesen
wurde. Kommen ja nur Nullen raus. Dann würde ich mein Augenmerk nochmal
auf die Verkabelung richten. Hast du mal durchgemessen, dass auch
Kontakt vom Programmierstecker zum zugehörigen AVR-Pin besteht und das
keine Kurzschlüsse zwischen den Leitungen besteht?
Ich habe selbst noch nicht viel mit dem SPI-Bus gemacht. Wie sieht es
denn mit der Beeinflussung der MAX 7219 auf den Programmieradapter aus?
des weis ich ja nicht wirklich,
wollte die fusebits so setzen das er meine externe quartz erkennt, aber
des macht er auch nicht, ich find des alles sehr komisch weil irgendeine
verbindung hab ich ja zu dem prozessor
...so hab jetzt auch nochmal die avr checkliste durch, alles wie es
beschrieben ist getan, bzw. war schon vorhanden.
nochmal zu meinem isp stecker:
pin1 = MISO
pin2 = +5V
pin3 = SCK
pin4 = MOSI
pin5 = RESET
pin6 = GND
das sehe ich doch richtig so,.....habe zwar einen 10polige gegenstelle
auf meiner platine verauen müssen aber da geht das kabel ja auch rein
und ja ich habe den pin 3 als meine 1 genommen, da ja 10polig, sprich
alles verschoben!
Moment. Verstehe ich das richtig, dass du den 6poligen Stecker in die
10polige Buchse gesteckt hast? Oder hast du dir ein Adapterkabel gebaut?
Die Gegenüberstellung der 10poligen und 6poligen Steckerbelegung findest
du hier:
AVR In System Programmer
nein nein, da die 6 polige buchse nicht so leicht zu finden ist(die die
ich auf meiner platine verbaut habe), habe ich eine 10 polige genommen,
bei der ich die ersten zwei und die lezten zwei pins abgeschnitten habe,
sprich 1und2, 9und10, was ich sagen wollte ist das ich auf dem
ehemaligen pin 3 an der buchse jetzt mein pin 1 habe, papelapap, des
passt schon so, hab einfach ne 10polige buchse genommen den 6poligen
stecker da rein gesteckt und entsprechend der pinbelegung für den
6poligen abgegriffen wie im bild das ich eingefügt habe!!!!
so männers, habe gegoogelt und durch glück hierdrauf gestossen aber nur
weil ich vorher die fehlermeldung hatte,(oben)
dann bin ich auf diesen Kommetar gestossen und es hat geholfen, man man
war das ne geburt!!!
----------------------------------------------------
Das Problem könnte an der Chip Revision liegen.
Im ct-Bot Forum hatten wir dasselbe Problem.
Problem ist wohl, dass sich die Fuses bei fabrikfrischen Chip mit 06xxx
Revision nicht korrekt lesen lassen.
Probier mal:
* ISP Frequenz so niedrig wie möglich einstellen (max. 250kHz).
* Danach einen Chip Erase ausführen
* Dann kann man die Fuses setzen und die ISP Frequenz wieder hochsetzen
und alles ist OK.
----------------------------------------------------
so jetzt weiter im programm, habe jetzt zumindest feststellen können das
alles was ich vorher getan hatte richtig war,das baut doch auf ;)
gruss s.
nicht wirklich, da werd ich morgen dran basteln, habe mich die letzten
zwei tage mit dem fehler beschäftigt, an mir selbst gezweifelt aber
morgen geh ich das an, funktion der matrix hab ich aber, es leuchten mal
zumindest alle Leds ;),dann mal nen schönen abend noch, muss ins
krankenhaus,
s.
moin moin,
hab da nochmal ne Frage am Rande, brauch ich am Ausgang meines
Mikrocontrollers und an den DIN Eingängen der MAX7219, Pullup, bzw.
Pulldownwiderstände???
Denke doch schon, bin mir aber nicht so sicher!
Gruss
s.
du solltest am ersten Modul einen 10k PullUp an Din anschalten und an
jeden Dout einen. An SCLK und LOAD kommt am letzen Modul je ein 10K als
PullUp.
Gruß
Udo
moin udo,
sieht sauber aus deine anzeige, respekt, das mit den kondensatoren hatte
ich schon, aber danke,
hab an den MAX7219 auch noch 22k widerstände von 5V auf Pin 18,
werd jetzt aber mal die pullups noch einlöten ;)
s.
achja Bilder wollt ich ja auch noch posten, kommt demnächst
Hallo Sebastian,
sehr schön aufgebaut deine Schaltung. Sieht gut aus.
Die Kondensatoren sollten nur so nah wie möglich an die 7219 ran. Das
ist sehr wichtig.
Wir gesagt, die Pullups genau so wie ich es oben beschrieben habe.
Allerdings könnte es in deinem Fall kontraproduktiv sein, da wegen dem
Aufbau auf Lochrasterkarte und der damit bedingten Leiterbahnführung die
Spannungsversorgung und Datenleitungen mit der Multiplexfrequenz des
7219 verseucht sind. Wenn du ein Scope hast, das mal messen.
Gegebenenfalls direkt am IC auf der Leiterbahnseite nochmal mit
zusätzlichen Kondensatoren die Spannungsversorgung abblocken.
Gruß
Udo
Nachtrag: achte beim einstellen von Bildern auf die Dateigröße. Evtl.
das png Format wählen, zumindest aber bei jpg komprimieren. Sonst gibt
es Ärger mit den Mod's
....hehehe
alles klar werde drauf achten,(mit den Pics)
dann würd ich sagen sollte ich das Ding mal ätzen, funktionieren tut es
ja, hab mir schon gedacht das es nicht so toll ist auf lochraster
aufzubauen, aber zum ersten mal testen geht des ja;)
s.
Wiedermal ne grundsätzliche Frage,
ich muss mir doch ein array anlegen in dem ich mein text speicher,
diesen text bzw dieses array muss ich dann irgendwie mit dem ascii-code
bzw generator verbinden, so dann hab ich das irgendwie, gott weis wie,
die andere sache ist ja das ich mir register anlegen muss die die werte
immer ein register weiterschieben, damit das ding dann auch läuft, oder
seh ich das jetzt mal grundsätzlich falsch???
gruss
s.
du wirst, wenn du Text anzeigen willst, erstmal eine Datei anlegen
müssen, wie z.B: Zeichensatz.h .In dieser Datei legst du dann die
hex-Daten für die einzelnen Zeichen ab, so wie in diesem Beispiel:
1
#ifndef h_zeichensatz
2
#define h_zeichensatz
3
4
unsignedcharch_32[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};// Code for char Space
5
unsignedcharch_33[8]={0x00,0x00,0x00,0x7D,0x00,0x00,0x00,0x00};// Code for char !
6
unsignedcharch_34[8]={0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00};// Code for char "
7
unsignedcharch_35[8]={0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00};// Code for char #
8
9
unsignedcharch_36[8]={0x00,0x32,0x49,0xFF,0x49,0x26,0x00,0x00};// Code for char $
10
unsignedcharch_37[8]={0x00,0x32,0x34,0x08,0x16,0x26,0x00,0x00};// Code for char %
11
....
12
....
13
....
14
15
unsignedchar*Zeichentabelle[256];
16
17
voidstaticZeichentabelle_Initialisieren()
18
{
19
Zeichentabelle[32]=ch_32;
20
Zeichentabelle[33]=ch_33;
21
Zeichentabelle[34]=ch_34;
22
Zeichentabelle[35]=ch_35;
23
Zeichentabelle[36]=ch_36;
24
Zeichentabelle[37]=ch_37;
25
.....
26
....
27
....
28
}
29
#endif
wobei die 32..33..34... jeweils für den dezimalen ASCII-Code des
Zeichens steht.
diese Datei bindest du dann so in deine .c ein:
1
#include"Zeichensatz.h"
Damit hast du jetzt erst mal genug Beschäftigung.... :)
Der Ansatz alles in ein Register und dann das Register schieben ist
falsch.
Besser ist, das ganze zu Berechnen. Aber dazu später.
Gruß
Udo
moin moin,
sag mal udo, die höhe der zeichen die du oben angegeben hast ist doch
8zeilig,oder??? wie hoch sind die buchstaben 6 zeilig??? der erste wert
ist ja die oeberste zeile,oder??
ich hab da was gefunden, aber denke das funzt nicht so ganz, hast du
alles von hand gemacht, jedes zeichen??? wenn ja junge junge das ist ja
ein ganzes stück arbeit, gehen die buchstaben bei dir erst in der
zweiten zeile von unten los, da man ja irgendwie ein komma machen möchte
und dies ja tiefer sitzt!!!!
gruss
s.
sehe ich das richtig das du spalten weise durch gehst und nicht
zeilenweise,so sieht es zumindest bei dem ! aus, da sind ja die ersten
zwei spalten aus in der dritten ist dann das ! und dann sind die letzten
4 spalten wieder aus, oder hab ich das jetzt falsch interprtiert???
gruss
s.
Hallo Sebastian,
Ja, ich gehe Spaltenweise vor, vorgegeben durch den internen Aufbau der
Register beim 7219.
Für die 8x8 Matrix wird der 7219 im "no decode" - Modus betrieben.
Dadurch ergibt sich, dass jede Spalte = Digit0 bis Digit7 = Adresse, mit
einem entsprechen Wert im Data-Register beschrieben wird. Die Zuordnung
sieht so aus ( lt.Datenblatt):
z.B.: Digit 0, also die ganz rechte Spalte, das hat die Adresse 0x01.
Füllst du das dazugehörige Datenregister z.B. mit: 0xFF , leuchten alle
LED's in dieser Spalte. D.h., das Wort, dass du dem 7219 sendest, muss
also 0x01FF sein. Die Berechnung des Daten-Wertes für eine Spalte sieht
so aus:
X = D7 = MSB = Wertigkeit: 8 dezimal
X = D6 = Wertigkeit: 4 dezimal
X = D5 = Wertigkeit: 2 dezimal
X = D4 = Wertigkeit: 1 dezimal
X = D3 = Wertigkeit: 8 dezimal
X = D2 = Wertigkeit: 4 dezimal
X = D1 = Wertigkeit: 2 dezimal
X = D0 = LSB = Wertigkeit: 1 dezimal
Der ermittelte dezimale Wert muss dann natürlich in Sedezimal gewandelt
werden.
Wie du deinen Zeichensatz jetzt erstellst, ob die Zeichen nur 1 Zeilig
oder 8 Zeilig hoch sind, bleibt dir überlassen.
Die Spaltenbreite für jedes Zeichen kannst du auch variieren. Das wird
natürlich von der Logik her schwieriger, die Zeichen dann aneinander zu
fügen. In meinem Beispiel im oberen Post bin ich von einer festen
Zeichenbreite von 8 Spalten ausgegangen.
Ich hatte mir hier: http://www.pocketmt.com/ die Demoversion des GLCD
Font Creator's gezogen, damit können immer 15 Zeichen erstellt und auch
ausgegeben werden. Aber Achtung, für die Verwendung beim 7219 müssen die
erstellten Zeichen vor der Ausgabe horizontal gespiegelt werden.
>wenn ja junge junge das ist ja ein ganzes stück arbeit, snip....
Hab ich nicht gesagt, dass du erst mal genug Beschäftigung hast..... :))
Gruß
Udo
looool,
alles klar, hab bis jetzt 88 zeichen erstellt, alle 8 splaten breit,
wobei mir gleub ich 5 spalten für alle zeichen und zahlen und
sonderzeichen langen würden, hmmm, werd mal weitermachen,
kanns dir ja mal zeigen oder schicken!
hab auch noch kein schimmer wie ich das mit dem laufen dann realisieren
kann, das sich die buchstaben durchschieben.
s.
>hab auch noch kein schimmer wie ich das mit dem laufen dann realisieren>kann, das sich die buchstaben durchschieben.
kommt Zeit, kommt Rat.....
also die Tastaturzeichen solltens wohl schon alle sein, oder?
Gruß
Udo
ja,
hab jetzt mal 98 zeichen gemacht, buchstaben a-z (groß und klein), dann
ä,ö,ü (gross und klein), zahlen von 0-9, sonderzeichen, jetzt langt es
;)
s.
Hallo Sebastian,
mir ist da noch was eingefallen. Um Platz im Ram zu sparen wäre es
sinnvoll das die Zeichen aus dem Programmspace nicht ins RAM geholt
werden. Dazu müßte die Zeichentabelle aber ergänzt werden:
1
#ifndef h_zeichensatz_neu
2
#define h_zeichensatz_neu
3
4
#include<avr/pgmspace.h>
5
6
unsignedcharPROGMEMch_32[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};// Code for char Space
7
unsignedcharPROGMEMch_33[8]={0x00,0x00,0x00,0x7D,0x00,0x00,0x00,0x00};// Code for char !
8
unsignedcharPROGMEMch_34[8]={0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00};// Code for char "
9
unsignedcharPROGMEMch_35[8]={0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00};// Code for char #
10
unsignedcharPROGMEMch_36[8]={0x00,0x32,0x49,0xFF,0x49,0x26,0x00,0x00};// Code for char $
11
unsignedcharPROGMEMch_37[8]={0x00,0x32,0x34,0x08,0x16,0x26,0x00,0x00};// Code for char %
12
unsignedcharPROGMEMch_38[8]={0x00,0x22,0x55,0x49,0x55,0x22,0x05,0x00};// Code for char &
13
unsignedcharPROGMEMch_39[8]={0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00};// Code for char '
14
unsignedcharPROGMEMch_40[8]={0x00,0x00,0x3C,0x42,0x81,0x00,0x00,0x00};// Code for char (
15
unsignedcharPROGMEMch_41[8]={0x00,0x00,0x00,0x81,0x42,0x3C,0x00,0x00};// Code for char )
16
........
17
........
18
19
unsignedchar*Zeichentabelle[256];// hier sollte nichts geändert werden, egal wieviel Zeichen oben definiert sind
ochne, oder??
d.h. ich muss alle zeichen nochmal neu machen, ich dreh durch,
hmmm, das was ich später an den max7219 schicke vom mega32 ist doch das
D0-D15, ist es dann nicht so das es mit D0 losgeht, oder fängt D0 an der
8ten Stelle an und geht dann nach links mit D1, D2, D3 weiter???
entweder verstehe ich dich gerade nicht,oder wir missverstehen uns?? ich
hab mal ein bild zugefügt und dein $ zeichen eingezeichnet, wenn du die
werte so benutzt und ich so auch vorgegangen bin, passt es doch!!! die
roten punkte sind die eingeschaltetn LEDS ;)
gruss
s.
Hallo Sebastian,
wenn du die Zeichen so wie in deinem Beispiel erstellt hast, ist alles
o.K.
Zu deiner Frage wie die Zeichen zum 7219 gesendet werden:
Der 7219 erwartet als erstes Bit das MSB, also D15, da du immer ein
Wort, also 16 Bit, senden musst. Davon stellt D15 bis D8 die Adresse dar
und D7 bis D0 deine Daten (das Zeichen).
Gruß
Udo
mahlzeit,
du udo das was du etwas oben gemeint hast mit: wobei die 32..33..34...
jeweils für den dezimalen ASCII-Code des Zeichens steht. versteh ich
nicht so ganz, hab das jetzt mal fertig gemacht würd mich interessieren
ob es stimmt was ich gemacht habe!!! hab es angehängt ;)
gruss
s.
mahlzeit udo,
also heist das für mich das ich im oberen teil überall die richtigen
zahlen eintragen muss sprich
unsigned char ch_1[8] ={0x00, 0x3F, 0x44, 0x44, 0x3F, 0x00, 0x00,
0x00}; // Code for char A wird dann-->
unsigned char ch_65[8] ={0x00, 0x3F, 0x44, 0x44, 0x3F, 0x00, 0x00,
0x00}; // Code for char A
usw.
und bei der tabelle heist es dann für z.B A
Zeichentabelle[65] = ch_65;
und das mit dem "Progmem" ist dann so gemeint?
unsigned char ch_65[8] PROGMEM ={0x00, 0x3F, 0x44, 0x44, 0x3F, 0x00,
0x00, 0x00}; // Code for char A
gruss
s.
Hallo Sebastian,
Einen Jumper für die Baudrate? Was für eine Baudrate meinst du?
Zum Stromlaufplan:
Am IC4 PIN DOUT , der Widerstand kann entfallen.
Am IC4 PIN CLK , den Widerstand gegen Masse schalten. (Ich weiß, ich
habs vorher anders gesagt, sorry. )
Am IC1 von PIN 9 einen Kondensator: 100nF, gegen Masse schalten.
Gruß
Udo
mahlzeit,
hmm, am pin 9 von ic1 hab ich doch vor dem widersatnd einen 100nF
kondensator, oder muss noch direkt davor einer , kann ich eigentlich
noch einen externen reset-taster einbasteln, den muss ich ja entprellen
dann, oder???
gruss
s.
Hallo Sebastian,
der Kondensator, den du vor dem Widerstand geschaltet hast, liegt
zwischen Vcc und GND und dient als Abblockondensator für IC1. Für eine
vernünftige Resetfunktion brauchst du neben dem Widerstand noch einen
Kondensator von 100nF direkt von Pin9 gegen GND. Parallel zu diesem
Kondensator kannst du natürlich auch einen Tastkontakt setzen, als
manuellen Reset. Der braucht auch nicht entprellt werden.
Gruß
Udo
moin moin,
so da bin ich mal wieder hatte nicht soviel zeit in der letzten zeit
;)....meine platine ist fertig und geht nicht, bringt wieder die
fehlermeldung
entering programm mode,..failed,...ich hab zu meiner lochrasterplatine
nix verändert, nur mehr masseflächen, ich versteh die welt nid,.. werds
nochmal(5000mal) durchmessen,
soden
s.
ich verstehs echt nicht,
hab nur die änderungen drinne wie du oben gesagt hast, auf meiner
lochraster ist es aber nicht gannz so, da ist es wie das schaltbild was
ich gepostet habe, versteh des nicht,
schaltung hab ich jetzt 5 mal durchgemessen, kein plan was da falsch
sein sollte,, ich poste mal ein foto der platine
s.
Hallo Sebastian,
ich kann in deinem Stromlaufplan auch nichts Fehlerhaftes entdecken.
Da wirst du deine Leiterplatte noch mal genauer unter die Lupe nehmen
müssen. Evtl. Haarrisse in den Leiterbahnen, Kurzschlüsse beim Löten
etc.
Zum Programm hab ich mal was angehängt.
Gruß
Udo
hallo udo,
erstmal danke, könnte vielleicht ein haarris sein, mal
schauen....vielleicht liegt es aber auch an der leitungsführung vom
stecker zum controller, muss ich mal testen.
gruss
s.
So nebenbei erwähnt, man kann als Treiber auch MAX6960 benutzen. Hat
paar nette Spielereien wie Fading, Negierung, auch bicolour ist möglich.
Ein Treiber steuert zwei 8x8-Monocolour, bzw. eine 8x8-bicolour. Ich
hatte sowas im Rahmen eines Schulprojekts aufgebaut (3xMAX6960 mit 6 8x8
Matrizen und ATMega16) und es hat nicht schlecht funktioniert. MAX6960
habe ich im Handel noch nie gesehen, aber man kann bei Maxim paar
Samples bestellen (ich hatte damals jeweils 8 von 6960, -61, -62 und -63
bekommen). Aber ich rate zu 6960, weil mit 6962 hatte ich Probleme.
Damals war es meine erste Erfahrung mit µc.
hmm,
ok,loooool,......dann ist mein problem wieder mal vor der tastatur ;)
dann muss ich mal schauen was ich falsch gemacht habe, bzw. gemacht
haben könnte
gruss
s.
mahlzeit,
da bin ich wieder, Platine funst wieder :).....dank meinem
Elektronik-Händler habe ich jetzt einge Zeit mit Fehlersuche verbracht,
Platine überarbeitet und neu geätzt, half alles nichts, da die zwei
kondensatoren die ich beim dem Superhändler gekauft hatte anstatt 22pf
220pF hatten, was zur Folge hatte das mein Quarz nicht schwingte und
mein Prozessor somit nicht funste, da ich den fehler bei mir suchte und
nicht beim dem Superelektronikshop, hat das jetzt alles etwas länger
gedauert ;),......kurz und knapp ich könnte kotzen, wahnsinn,
gruss
s.
nabend,
ja des ist schon klar, freut mich ja auch, aber es ärgert mich halt
irgendwie tierisch das es an einem falschen bauteil lag,
zwecks meiner verkabelung hab ich da nochmal ne frage ich habe jetzte
alle kathode in spalten aufgeteilt, woran dann die d0-d7 angeschlossen
werden, sprich d0 ist ganz rechts und d7 eben ganz linke spalte, stimmt
oder??
bei den zeilen hab ich die anoden zusammengfügt, wie ist das dann
aufgebaut ist die unterste zeile mein sega und die oberste mein seg dp
,oder ist das andersrum??? oder hätte ich die anoden in den spalten
zusammenfügen müssen und die kathoden in den zeilen???
hab es mal versucht grafisch darzustellen, pic ist angehängt
gruss
s.
moin,
ok....so hab ich des auch gehabt, hab auf der anzeige abr nur komische
grafiken, die linke matrix leuchtet komplett und die zwei anderen zeigen
irgendwas an, muss jetzt aber erstmal in die schul, schau später mal
danach und meld mich wieder ;)
gruss
s.
moin moin,
nach langer pause melde ich mich wieder zurück, habe aber immernoch
problem mit komischen zeichen auf meiner matrix, soll ich ma ein video
drehen, vielleicht macht das die sache etwas einfacher,
gruss
s.
hi udo,
aufgeben, nene dafür hab ich da jetzt schon zuviel herzblut
reingesteckt, komische zeichen heist meine linke matrix leuchtet
komplett und die beiden anderen matrixen zeigen irgendwas an, ich dreh
jetzt einfach mal ein video, kann ich das hier überhaupt hochladen???
gruss
s.
wahrscheinlich nicht, aber ist ja schon gut beschrieben. Geh doch mal
systematisch vor: Sprich erst mal alles in der Main auskommentieren was
nicht zur Initialisierung des Displays gehört. Was macht deine Anzeige
dann?
ok, los gehts
Loaded plugin STK500
Loaded plugin AVR GCC
Loaded partfile: C:\Programme\Atmel\AVR
Tools\PartDescriptionFiles\ATmega32
AVR Simulator: Please wait while configuring simulator...
AVR Simulator: ATmega32 Configured OK
Loaded objectfile: C:\Dokumente und
Einstellungen\school\Desktop\1\led\default\led.elf
-zuerst geht er jetzt die ganze zeichentabellen durch
-dann DDRB = (1<<PB4)|(1<<PB5)|(1<<PB7); der spiu initialisierung
-dann läuft er in dem oberen die nächsten zwei zeilen durch und springt
danach in die delay_basic
-dann transmit(0x0C,0x01); // normal mode transmit(0x0C,0x01);
-dann forschelife der 7219 initialisierung
-die läuft er durch danach transmit(0x0A,0x01);// set intensity 0x00 -
0x0F
-dann die darüberliegende forschleife die läuft er auch durch und danach
transmit(0x0B,0x07); // scan digits 0-7 Achtung, damit ist eine Stelle
gemeint
-die forschleife die über dem transmit ist läuft er auch durch springt
dann in die transmit(0x09,0x00); // no decoding
dnach springt er in die forschleife von load low
-danach ins main in die forschleife
-die läuft er auch durch und danach dann ins updatedisplay(test) und
danach ist dann schluss, jetzt macht er nix mehr und anzeige immernoch
irgendwas
s.
Hallo Sebastian,
sorry, aber da war noch ein Fehler im Programm:
1
#include"Zeichensatz_neu.h"
muss natürlich
1
#include"Zeichensatz.h"
heißen.
Da müsste aber der Compiler eigentlich gemeckert haben.
Außerden solltest du natürlich
1
# define F_CPU 10000000
an deinen CPU-Takt angleichen.
Überprüf auch bitte ob du die LOAD-Leitung an PB4 angeschlossen hast.
Ansonsten diesen Teil in der Main mal auskommentieren:
1
charTest[24];
2
3
for(inti=0;i<24;i++)
4
{
5
Test[i]=0x00;
6
}
7
8
UpdateDisplay(Test);
9
10
_delay_ms(1000);
11
12
TestDisplay(SCROLL);
dann sollte das Display nur initialisiert werden und nichts anzeigen.
Gruß
Udo
Nabend,
das mit dem zeichensatz hab ich vor 2 wochen schon geändert, aber merci
hab am pin 5 sprich pb4(ss) den load der 7219 angeschlossen, passt also
auch, mein quarz hab ich zwischen 12 und 13 ein 10mhz quartz sollte also
auch passen, hab leider kein oszi da!
den teil hab ich jetzt auchmal auskomentiert, immernoch dasselbe
spiel,....kann es sein, da meine platine mit den 3 7219 über ca 10-15cm
langen leitungen mit der matrix verbunden ist, das ich da irgendwelche
abartigen störungen reinbekomme??
gruss
s.
Hallo Sebastian,
laß mal den im obigen Post aufgeführten Teil in der Main auskommentiert
und ändere diesen Teil mal so ab:
1
voidstaticmax7219_Init(void)// 7219 werden initialisiert
2
{
3
Load_Low();
4
for(inti=0;i<3;i++)
5
{
6
transmit(0x0C,0x01);// normal mode transmit(0x0C,0x01);
7
}
8
Load_High();
9
10
Load_Low();
11
for(inti=0;i<3;i++)
12
{
13
transmit(0x0A,0x01);// set intensity 0x00 - 0x0F
14
}
15
Load_High();
16
17
Load_Low();
18
for(inti=0;i<3;i++)
19
{
20
transmit(0x0B,0x07);// scan digits 0-7 Achtung, damit ist eine Stelle gemeint
21
}
22
Load_High();
23
24
Load_Low();
25
for(inti=0;i<3;i++)
26
{
27
transmit(0x09,0x00);// no decoding
28
}
29
Load_High();
30
31
Load_Low();
32
for(inti=0;i<3;i++)
33
{
34
transmit(0x0F,0x01);// Display in Test-Mode, alle LEDs leuchten mit voller Intensität
35
}
36
Load_High();
37
}
dann sollten alle LEDs mit voller Intensität leuchten.
Falls nicht, hast du noch irgendeinen Bock in deiner Hardware.
Die Leitungslänge von 10-15cm vom Controller bis zu den 7219 halte ich
nicht für kritisch, sofern die Masse und auch die +5V über entsprechend
große Querschnitte verlegt sind, also >0,5mm² und die
Blockkondensatoren,10µF und 0.1µF, jeweils nahe der 7119 plaziert sind.
Gruß
Udo
moin moin,
jetzt mal ne blöde Frage, was für Masse und +5V leitunegn meinst du?? An
meiner Matrix wohl kaum, die an meinem "Mainboard" ist so stark, ist
0,5mm².
Dann werd ich jetzt mal ausprobieren ob meine LEDs leuchten ;)
s.
ups, sorry, das hatte ich falsch verstanden. Ich dachte die 7219 sitzen
bei den LEDs. Ok, das kann, muss aber nicht zu Störungen führen. Aber
bei deinem Probeaufbau hatte es doch auch funktioniert?
Gruß
Udo
naja....wäre vielleicht besser gewesen ich hätte dein Layout nicht
gesehen... ;-)
Was mir noch eingefallen ist: nachden du den Atmel programmiert hast,
solltest du die ISP-Zuleitung abziehen und die schaltung resetten. Da du
keine Entkopplungswiderstände für die ISP-Schnittstelle vorgesehen hast,
könnte der Prommer die SPI-Schnittstelle behindern.
Gruß
Udo
Man kann, bzw. sollte 100 Ohm Widerstände von den ISP (SPI) Pins des
Controllers in Reihe zu dem Rest der Schaltung legen. Also Verbindung
ISP-Pfostenleiste <--> ISP(SPI)-Pins direkt verbinden und Verbindung
ISP(SPI)-Pins zum Rest der Schaltung über 100 Ohm in Serie. Diese dienen
dazu, Störungen des Programmiervorgangs durch den Rest der Schaltung zu
vermeiden. In deinem Fall nicht ganz so schlimm, da nur Eingänge
angeschaltet sind. Du solltest aber nach dem Programmiervorgang den
Programmer abziehen und den Controller resetten.
Zu deinem Layout: du hast wahrscheinlich nicht viel Übung im Layouten,
denn du hast so ziemlich alle Fehler die man machen kann gemacht.
Das fängt bei der Plazierung der ICs an, geht über Verlegung der
Spannungsversorgung der Ics und endet bei der Plazierung von wichtigen
Bauteilen wie Blockkondensatoren und Quarze bzw. dessen Kondensatoren.
Was nutzt dir z. B. eine große Massefläche, wenn die zum Teil bis auf
wenige mm zum Massepunkt verjüngt wird? Oder Blockkondensatoren..wenn es
heißt so nah wie möglich ans IC, dann ist damit gemeint, so nah wie
möglich an die Spannungsversorgungs-Pins des IC. Grundsätzlich wird die
Spannungsversorgung, also + und Masse von ICs möglichst Sternförmig und
Parallel verlaufend verlegt. Am Sternpunkt wird die Spannungsversorgung
eingespeist und dort sitzt i.d.R. ein relativ großer Kondensator von
mehreren hundert µF.
Gruß
Udo
hmmmm,
ok habe verstanden, ist aber auch erst meine zweite platine,.....hab den
quelltext jetzt mal abgeändert, es leuchten alle LEDs, aber das tolle
ist das die rechte und die mittlere in voller intensität leuchten und
die linke die vorher in voller intensität geleuchtet hat jetzt nicht
mehr so stark leuchtet.
also den ganzen scheiss jetzt in die presse und neues board planen :(
gruss
s.
nee, nicht in die Tonne kloppen.....
Löt doch versuchshalber mal auf der Lötseite an jeden 7219 direkt
zwischen Pin19 und Pin9 einen 22µF Kondensator und schau dann mal was
passiert.
Gruß
Udo
hmm,
hab ich jetzt gemacht, gebracht hat es nicht wirklich was,....das
komische ist das im einschaltmoment die linke matrix auch hell leuchtet
dann aber wie soll ichs beschreiben sieht aus als ob sie nach rechts
dann läuft und dabei dunkler wird!!!
gruss
s.
Hallo Sebastian,
ok, vergiss erst mal das dunkler werden.
Kommentier bitte jetzt mal diesen Teil wieder aus:
1
Load_Low();
2
for(inti=0;i<3;i++)
3
{
4
transmit(0x0F,0x01);// Display in Test-Mode, alle LEDs leuchten mit voller Intensität
5
}
6
Load_High();
und ergänze mal diesen Teil so:
1
//char* Text = " ZWÖLF BOXKÄMPFER JAGEN VIKTOR QUER ÜBER DEN GROßEN SYLTER DEICH | zwölf boxkämpfer jagen viktor quer über den großen sylter deich "; // Dieser Text wird angezeigt
2
char*Text="123";
und diesen Teil so:
1
intmain()
2
{
3
Zeichentabelle_Initialisieren();
4
SPI_MasterInit();
5
_delay_us(10);
6
max7219_Init();
7
8
TextLen=strlen(Text);
9
charTest[24];
10
11
for(inti=0;i<24;i++)
12
{
13
Test[i]=ColumnFromText(i);
14
}
15
16
UpdateDisplay(Test);
17
18
//_delay_ms(1000);
19
20
//TestDisplay(SCROLL); // bei 'SCROLL' läuft der Text von Rechts nach Links durch und bei 'SWING' läuft der Text von Rechts nach Links und wieder zurück.
21
22
while(1){}
23
24
return0;
25
}
dann sollte auf deinem Display "123" erscheinen.
Und immer daran denken, nach dem Programmieren die ISP-Schnittstelle
abziehen und den Controller resetten.
Gruß
Udo
ok probier ich aus, was mich jetzt aber ein wenig wundernt warum sind in
deinem quelltext sachen 0 und 24 , while(1) blau, das einzige was bei
mir blau ist sind die int, for,char etc...
mach ich vielleicht auchnoch was falsch beim übertragen ?? ich muss ja
nur das flash programmieren und das eeprom nicht,oder?
gruss
s.
ok und die elf, da steht bei mir auch was drin in dem fenster, ich
versteh die welt nimma, des kann doch alles nicht sein, was mach ich
bitteschön falsch, jetzt zeigt er mir wieder die linke matrix komplett
an und bei den anderen beiden leuchten nur die uneteren reihen:(
gruss
s.
du brauchst im AVR-Studio im Programmierfenster nur beim Flash auf
"Program" drücken. Aber achte darauf, dass auch der richtige .hex File
ausgewählt ist.
Also Pfad und Name checken.
//TestDisplay(SCROLL); // bei 'SCROLL' läuft der Text von Rechts nach Links durch und bei 'SWING' läuft der Text von Rechts nach Links und wieder zurück.
21
22
while(1){}
23
24
return0;
25
}
Du kannst doch obigen Code mit Copy und Paste einfügen...
so ich mach schluss für heute,
verändert hat sich nix grossartig, bin aber auch total durcheinander im
kopf, denke eine nacht drüber schlafen wird das beste sein!
bis morgen
gruss
s.
versuch auch noch mal folgendes: Den Widerstand, der von SCLK der
SPI-Schnittstelle nach Masse geschaltet ist, gegen +5V schalten oder
weglassen.
Gruß
Udo
hab ich jetzt probiert und es verhält sich so, wenn der widerstand an
mass, oder +5V liegt keine veränderung, wenn der widerstand in der luft
hängt hab ich wieder das die rechten matrix und die mittlere volle
intensität leuchten und die linke schwächer, quelltext ist unverändert
zu gestern abend!!!
gruss
s.
nochmal zum verständnis, du meintest ja den widerstand der an meinem
letzten 7219 am clk hängt,oder???
ich bin echt kurz davor ne neue platine zu planen, die ich direkt hinter
die matrix hängen kann, auf der nur die drei 7219 sitzen, den atmel auf
ne extra platine und drei abgeschirmte leitungen+ versorgung dann nach
oben führen...die software geht ja,denk ich zumindest ;)
gruss
s.
ich hab jetzt nochmal auf meinem anderen rechner das avr installiert da
fragt er mich jetzt am anfang als ich auf verbinden gehe mit dem mkII
was für eine
oszilator calibration byte nach einer frequenz was für ne frequenz ist
den das???oder besser gesagt wie bestimm ich die?? es geht
1MHz,2MHz,4MHz,8MHz
gruss
s.
nabend,
was ich auch nicht wirlich verstehe, wenn ich vom schaltbild her
dasselbe aufgebaut habe wie du, dann kann es ja nur an meiner
beschissenen leitungsführung liegen, wenn bei mir alles indentisch ist,
muss es doch daran liegen!
ich fahr jetzt mal los und besorg mir ein oszi, bin gerade die neue
platine zu planen, vielleicht fällt dir ja nochwas ein was ich unbedingt
beachten sollte, ausser die kondesatoren direkt, bzw. so nahe wie
möglich an die spannungsversorgung der ics, hast du bei den 100nf,
folienkondensatoren, oder keramische???
gruss
s.
..und wenn ich des ganze mit dem hier vergleiche ist bei mir auch nicht
viel anders,http://www.woe.onlinehome.de/projekte.htm
hab auchschon den atmel getauscht, bringt aber auch nix!!!!
gruss
s.
Hallo Sebastian,
> nochmal zum verständnis, du meintest ja den widerstand der an meinem> letzten 7219 am clk hängt,oder???
genau den mein ich. Lass in einfach mal weg.
Dann lad mal dieses Programm:
1
# define F_CPU 4000000
2
3
#include<avr/io.h>
4
#include<avr/interrupt.h>
5
#include<util/delay.h>
6
#include<stdbool.h>
7
#include<stdlib.h>
8
#include<string.h>
9
10
11
voidtransmit(unsignedchar,char);
12
13
voidstaticLoad_Low()//Datenübernahme durch die 7219 wird vorbereitet
14
{
15
PORTB&=~(1<<PB4);
16
}
17
18
voidstaticLoad_High()//Daten werden von den 7219 übernommen
ok, würd ich gerne machen, kannst mir noch sagen was ich bei dieser
komischen abgleichfrequenz einstellen muss, bin grad die tür rein, hab
jetzt aber entlich mal ein oszi
gruss
s.
nochwas, kann es sein das es auch damit zusammenhängt das wenn ich am
quarz mit dem oszi messe, auf der einen seite das signal wunderbar
sinusförmig ist auf der anderen seite weniger sinusförmig??
s.
nabend,
hab das programm aufgespielt, das mit dem wechseln klappt schon, nur
sind nicht alle leds an, bzw. aus.........denke echt das die platine
scheisse ist, da ich ja auch dieses komische phänomän am quarz hab (eine
seite sauberes signal, andere seite unsauber)....werd mich morgen weiter
an meinem neuen layout auslassen, mach das so wie ichs oben beschrieben
habe, eine platine mit den 3x 7219 und was dazugehört, diese dann
steckbar direkt hinter die matrix, ohne kabel zur verbindung mit der
matrix, dann die 3 leitungen zum steuern und die spannungsversorgung,
den prozessor setz ich dann auf ne kleine platine unten ins
gehäuse,.....wird hoffe ich das einfachste sein, weil so komm ich nicht
weiter, obwohl mir so bei meinem kampf hilfst,.....man des kann doch
nicht so schwer sein,.......sach mal kommst du von der küste udo???
soden
gruss
s.
Hallo Sebastian,
sorry, dass mit dieser "Abgleichfrequenz" kann ich dir auch nicht sagen,
mach mal nen Print-Screen wenn die Meldung kommt.
Das mit dem Quarz dürfte i.O. sein. Je nachdem mit was für einen
Tastkopf du an die Anschlüsse gehst, wird das Signal mehr oder weniger
bedämpft. Man sollte in dem Bereich mit Tastköpfen 100:1 arbeiten, aber
ein 10:1 reicht auch. Aber Hauptsache ist, dass ne Schwingung in
ausreichender Amplitude da ist, so 3-4 Vss. Wird eh intern im Controller
ein Rechtecksignal draus gemacht.
Wo du schon mal einen Oszi da hast, mess doch mal die
Versorgungsspannung, wie die aussieht und auch das SCLK- und LOAD-Signal
von der SPI-Schnittstelle.
Nein, ich bin nicht von der Küste....:))
Tiefster Ruhrpott hier...
Gruß
Udo
moin, moin
aus dem tiefsten ruhrpott also, auch nid schlecht ;)
so hab mal alles gemessen, bin aber nicht der oszi meister, hab alles
auf auto und 10:1 gemessen, hoffe die bilder sind einigermaßen
brauchbar, was ich bezweifle, hab mir vorhin nochmals deine platine
angeschaut in dem anderem forum, da sind ja wesentlich weniger
kondensatoren und widerstände zu erkennen, und deine max sind ja smd.
gruss
s.
Hallo Sebastian,
die Bilder sind ja soweit ok.
Was hast du für Kondensatoren am Quarz?
Was für ein Netzteil hast du? (Stromlaufplan)?
Das mit der Frequenzeinstellung im AVR-Studio vergiss mal schnell, da du
ja einen Quarz angeschlossen hast. Dieses Bild ist zum Abgleich, wenn
man den internen Oszillator benutzt.
Aber zeig doch noch mal ein Bild von den Fuses-Einstellungen. Der dritte
Reiter von links....
Gruß
Udo
mahlzeit,
also als netzteil hab ich so ein kleines steckernetzteil mit 1200mA da,
5V,...hab dazu leider kein stromlaufplan, hätte aber noch ein richtiges
netzteil da, zur not.
an meinem quarz hab ich keramsiche kondensatoren 22pF, gemessen haben
die ca. 23pF,....denk das könnt aber die abweichung meines multimeters
sein.
bild hab ich angehängt
gruss
s.
mmh, sieht soweit alles ok aus.
Natürlich ist so eine Ferndiagnose immer schwierig.
Hat das Netzteil denn auch noch 5V Ausgangsspannung bei Last, also wenn
z.B. alle LEDs im Testmodus leuchten? Und wie sieht dabei die
Lastspannung auf dem Oszi aus? Die Masseleitung der Oszi's solltest du
bei den Messungen immer am Eingangsklemmpunkt der Spannungsversorgung
deiner Schaltung anschließen.
Mess das mal und mach Bilder davon.
Gruß
Udo
so hab ich jetzt mal gemessen, hab jetzt ein andres netzteil dran,
anständiges industrienetzteil mit 3A bei 5V, bei dem bricht garrahtiert
nix zusammen, hatte ausserdem ganz am anfang mal den strom der gesamten
schaltung gemessen als alle leds auf volle intensität leuchteten und da
kam ich auf 800mA, hab die bilder wieder angehängt,
gruss
s.
also diese abklingende Schwingung auf DIN gefällt mir gar nicht.. kannst
du mal die Zeitablenkung vergrößern, so dass man die Schwingung komplett
sieht?
Das Layout für die Matrix ist ok.
Gruß
Udo
du meinst jetzt DIN und DOUT ?
Sorry, aber ist sehr schwer nachzuvollziehen was du meinst, wenn du dich
nicht sorgfältig ausdrückst und an Rechtschreibregeln hälst.
Rechtschreibfehler ist was anderes, die macht sicher jeder....
Gruß
Udo
was mir jetzt auch noch aufgefallen ist, das Signal das am ersten DOUT
rauskommt sieht fast so aus wie das Signal das ich auf der 5V Leitung
habe,
werde das Layout jetzt echt nochmal machen, zuerst meine Kondensatoren
platzieren, oder sollte ich zuerst die Steuerleitungen machen,
eigentlich hab ich ja nur das Problem auf den DIN und DOUT Leitungen,
hab die Leitung mal nach dem ersten 7219 unterbrochen bringt aber keinen
Erfolg, hab dann auch noch einen anderen 7219 gesteckt den ich hier
rumliegen habe, das bringt aber auch keinen Erfolg, es muss doch an dem
Layout liegen,oder was meinst du Udo
Gruss
s.
also, die Bilder die du bis jetzt gepostet hast, zeigen ja nur den
Ruhezustand, also den LOW-Pegel auf den Leitungen, der allerdings schon
mit ca. 200mV-300mV Störsignalen überlagert ist. Deutet auf schlechte
Masseführung und Spannungsversorgungssiebung hin. Kannst du nicht mal
die Main dahingehend ändern, dass der Test-Modus periodisch wiederholt
wird? Dann könnte man auch mal die High-Signale sehen. Besser wär
natürlich für sowas ein Logik-Analyser.
Gruß
Udo
hmmmm,
jetzt versteh ich garnix mehr,
warum soll das jetzt der Ruhezustand gewesen sein,
das war doch während dem Betrieb,
ich versteh solangsam echt nix mehr, meine Schaltung sollte passen,
zumindest vom Schaltbild,
die Software sollte passen, laut dir,.....also kann es ja nur noch an
dem Layout liegen, wenn es nicht am Layout liegt, dann ist der Fehler ja
in einer der zwei Komponenten von denen ich ausgehe das sie stimmen.
Also hab ich jetzt die Möglichkeit noch Tage hier zu suchen,
Logikanaylser hab ich leider nicht. Mich immer mehr und mehr verrückt zu
machen(ich weis garnicht wie oft ich das Schaltbild jetzt schon mit dem
Layout verglichen habe), dachte jetzt entlich was gefunden zu
haben,....;(
und wenn ich mir andere Platinen anschaue, z.b. die von
http://www.woe.onlinehome.de/proj_gif/ledmodul.gif
dann seh ich da nix anderes, als das was auf meinem Schaltplan ist.
Gruss
S.
ok, ich denke du hast jetzt gesehen was ich gemeint hab mit Ruhezustand
bzw. LOW-Pegel und und jetzt siehst du ja auch HIGH-Pegel(Impulse) auf
den Leitungen
Ist die LOAD-Leitung immer LOW, oder kommt da zwischendrin mal nen
HIGH-Impuls?
Um das besser sehen zu können nimm als Main einfach mal diese hier:
also ich hab das jetzt aufgespielt,
an der LOAD-Leitung scheint sich was zu tun, nur ist das so schnell das
kann ich nicht messen, meine matrix wechslet jetzt auch, hin und her,
aber nicht so wie gewollt, sondern so das eine Zeit lang die linke
Matrix hell leuchtet und die anderen schwach, dann wechselt es das die
rechte und die mittlere hell leuchtet und die linke schwach, ich mach
jetzt echt ne neue platine für die max7219, mit den kabel ist des kacke
und dann kann ich auch gleich meine Leitungsführung verbessern. du hast
bei dir ja für die CLK,LOAD und DIN Leitung ne abgeschirmte genommen,
die hast aber nur auf einer seite geerdet, da sonst ja ne masseschleife
entsteht, oder seh ich das falsch??
gruss
s.
wieso Masseschleife? Ich hab von meinem Board über die Abschirmung die
Masse zu den Anzeige-Modulen geführt.
Das return 0 dient dazu, falls sich der Controller in der Main mal
verschluckt, die Main von Anfang wieder ausgeführt wird. Ist in dem
obigen Beispiel uninteressant, da der Controller eh in der
Endlosschleife davor läuft.
Aber das Verhalten deiner Anzeige ist wirklich komisch. Möglich, dass es
an den langen Leitungen zu den LEDs liegt. Die 7219 sollen sehr
empfindlich sein. Das Problem habe ich nicht, da meine 7219 direkt auf
den Leiterplatten mit den LED-Matrixen sitzen. Andersrum hatte dein
Probeaufbau ja funktioniert, oder?
Gruß
Udo
nabend,
mein Probeaufbau hat damals soweit funktioniert, das alle LEDs an waren,
mehr aber auch nicht!!!
mit dem Return 0, gut zuwissen, wieder wat gelernt.
Ich meinte das mit der Masseschleife so, wenn man ein geschirmtes Kabel
nimmt und den Schirm auflegt sollte man dies nur auf einer seite der
Platinen machen, wenn beide am selben Potenzial hängen, aber da erzählt
dir jeder was anderes, ;)
Das mit der Initialiesierung hat nix gebracht, denke echt das es einfach
an den langen Leitungen liegt.
Gruss
s.
...
so ich mach mich dann mal ab in die kiste, will Morgen wieder früh raus
und das Layout fertig machen ;)
dann mal nen schönen Abend noch, bis morgen....
gruss
s.
Die Wirkung mag stimmen, aber die Begründung nicht:
In C ( wie auch in anderen Sprachen ) liefern Funtkionen immer einen
Wert zurück. Der Typ dieses Wertes steht vor dem Func-Namen. ( Selbst
wenn nichts zurückgeliefert wird, ist dieses Nichts = void ).
"main()" ist die Funkion, die vom "direkt" vom Betriebssystem aufgerufen
wird, ist somit "Das Programm". wird main() beendet, ist das Programm
beendet, und es sollte (!) ein Integer wert ( wegen "int main()" ) ans
BS geliefert werden: der sogenannte ErrorCode. Main teilt so dem
aufrufendem System mit, ob es Fehlerfrei ( = 0 laut Vereinbarung ) oder
nicht beendet wurde. Im "oder nicht" Fall muss der Programmierer dann
die Auflösung der Codes mitteilen, damit die Aufrufer wissen, was
geschah.
Gruß Hanns
und schöne Pfingsten.
Ich drücke die Daumen, daß die Schrift bald Laufen lernt
Hallo Sebbel,
Das mit dem Schirm stimmt schon.
Generell sollten MASSEN an "einem" Punkt zusammengeführt werden.
Verbindest Du zwei "Platinen" mit Masse, und dann den Ausgang der einen
mit dem Eingang der anderen Platine und zusätzl. die SChirmung i.e.
Masse, dann bilden Deine Masseleitungen ein Dreieck. wenn dann über jede
der drei Leitungen ein unterschiedlicher Strom fließt... ( Nimm U= R* I
und Du weisst Bescheid.)
In der Audiotechnik hört man das dann ganz gut.
Aber erst mal Erfolg bei Deinem Problem, das ich sehr spannend finde
Hanns
moin moin,
hätte da mal noch ne frage bezüglich der beschaltung isp schnittstelle
und controller, hab gerade gesehen das es leute gibt, die zwischen
sck,miso, mosi und reset, zwischen der schnittestelle und dem controller
100ohm in reihe haben, stimmt das so??
gruss
s.
Moin,
mir faäält auf, daß Du mit Deinen Beschriftungen teilweise in der
falschen Ebene bist.
Allt Verbindungen "x?" sind rot, ebenso wie die Beschriftung des
Verbinders
rechts unten
Hanns
nabend,
da ich der verzweiflung nahe bin und ehrlich gesgat nichtmehr weiter
weiss, könnte sich jemand erbarmen und mal schauen ob meine
prozessorbeschaltung so stimmt???
danke
gruss
s.
Moin, Moin...
habe jetzt nochmals meinen Plan der MAX7219 mit Schaltbildern verglichen
und gemacht und getan, stimmt alles,....Bauteile die ich verabut habe
sind für den 100nF einen keramischen und den 10µF einen Elko,
Widerstsände sind normale 1/4 Watt Widerstände.
Die Prozessorplatine werde ich heute ätzen und die MAX7219 PLatine
gleich auch nochmal,....wie kann ich testen ob die 7219 noch i.O.
sind???
MUss ich noch irgendetwas an der Prozessorbeschaltung beachten, denke
doch nicht!
Werde mir gleich nen neuen Prozessor mitnehmen, vielleicht hat der ja
auch ein Macken!!!!
Habe für die jeingen die es interesiert mal beide Layouts angehängt.
Gruss
S.
Hallo Sebastian,
so, wieder da...nach langem Wochenende.
Hat sich ja einiges getan. Laß dich nicht unterkriegen, du schaffst das.
Hab mal die Controllerschaltung angehängt.
Gruß
Udo
moin udo,
ich hab mal in einem anderem forum gestöbert, da hast du geschrieben das
du die 7219er mit 4MHz betreiben tust, auf deim schaltbild sehe ich das
du einen 16MHz Quarz drin hast, kann ich das jetzt so verstehen das dein
controller mit 16MHz läuft und das SCLK Sgnal dann 4 MHz hat???
dank dir für dein schaltbild, aber das ist ja leider genauso wie meins
;)
gruss
s.
so ich nochmal ;)
was mir noch gleich ins auge gefallen ist, du gehst auf deine platine
mit 5V, ist das ein 5V netzteil??? danach gehst du dann weiter auf die
schottkydiode und den kondensator, ist das zur filterung????
gruss
s.
Hallo Sebastian,
> du die 7219er mit 4MHz betreiben tust, auf deim schaltbild sehe ich das> du einen 16MHz Quarz drin hast, kann ich das jetzt so verstehen das dein> controller mit 16MHz läuft und das SCLK Sgnal dann 4 MHz hat???
richtig, das kannst du in deinem Programm über das SPCR-Register mit
Hilfe der SPR1 und SPR0 Bits einstellen. Datenblatt lesen....
> was mir noch gleich ins auge gefallen ist, du gehst auf deine platine> mit 5V, ist das ein 5V netzteil??? danach gehst du dann weiter auf die> schottkydiode und den kondensator, ist das zur filterung????
richtig, das ist ein 5V-Netzteil. Die Schottky ist dafür da, wenn die
Spannungsversorgung falsch herum angeschlossen wird, die Schaltung
geschützt wird. Sie leitet dann nämlich nicht.
Die Kondenstoren dienen dazu um Störspannungen zu unterdrücken.
Gruß
Udo
Hallo Udo,
dann hab ich das ja alles richtig gedeutet, werd es jetzt mal in die Tat
umsetzen,müssen die 100nF und der 0,47microF (sorry hab ein MacBook, da
find ich das micro grad nicht) unbedingt keramische Kondenstaoren
seinen, oder können das auch Folienkondensatoren sein???
Gruss
S.
ok, hat das auch ein Grund, weil bei dem Händler meines Vertrauens gab
es nur Folien als 0,47 microF, hab dann die 100nF dann halt auch als
Folie mitgenommen!!!
Gruss
S.
nabend,
udo was mir aufgefallen ist, ist folgendes, auf meinem alten schlatplan
ging das rsestsignal der isp schnittstelle vcc am R1 also vor dem
widerstand, bei dir, aber ich denke mal das ist richtig geht das
resetsignal von der isp schnittstelle ,auf den punkt R1 der nicht an vcc
angeschlossen ist, also so ne art pullup,.....und im gegensatz zu meinem
alten plan hast du im resetzweig einen 47µF drin und in meienm alten
paln ist ein 100nF drin???
aber ich werd jetzt erstmal wieder messen und schauen ;)
gruss
s.
DDRB=(1<<PB4)|(1<<PB5)|(1<<PB7);// set PB4(SS), PB5 (MOSI) and PB7 (SCK) output, all others input
27
28
SPCR=(1<<MSTR)|(1<<SPE)|(1<<SPR1)|(1<<SPR0);// enable Master, SPI, set clock rate fck/128
29
30
PORTB|=(1<<PB7)|(1<<PB4);
31
}
32
33
voidtransmit(unsignedcharaddr,chardata){/* Daten zu den 7219 schicken*/
34
35
SPDR=addr;// Start transmission
36
while(!(SPSR&(1<<SPIF)));// Wait for transmission complete
37
38
asmvolatile("nop");
39
40
SPDR=data;// Start transmission
41
while(!(SPSR&(1<<SPIF)));// Wait for transmission complete
42
}
43
44
voidstaticmax7219_Init(void)// 7219 werden initialisiert
45
{
46
Load_Low();
47
for(inti=0;i<3;i++)
48
{
49
transmit(0x0C,0x01);// normal mode transmit(0x0C,0x01);
50
}
51
Load_High();
52
53
Load_Low();
54
for(inti=0;i<3;i++)
55
{
56
transmit(0x0A,0x01);// set intensity 0x00 - 0x0F
57
}
58
Load_High();
59
60
Load_Low();
61
for(inti=0;i<3;i++)
62
{
63
transmit(0x0B,0x07);// scan digits 0-7 Achtung, damit ist eine Stelle gemeint
64
}
65
Load_High();
66
67
Load_Low();
68
for(inti=0;i<3;i++)
69
{
70
transmit(0x09,0x00);// no decoding
71
}
72
Load_High();
73
}
74
75
76
intmain()
77
{
78
SPI_MasterInit();
79
_delay_us(10);
80
max7219_Init();
81
82
while(1)
83
{
84
Load_Low();
85
for(inti=0;i<3;i++)
86
{
87
transmit(0x0F,0x01);// Dispay-Test an
88
}
89
Load_High();
90
91
_delay_ms(3000);
92
93
Load_Low();
94
for(inti=0;i<3;i++)
95
{
96
transmit(0x0F,0x00);// Display-Test aus
97
}
98
Load_High();
99
100
_delay_ms(3000);
101
}
102
103
while(1){}
104
105
return0;
106
}
das ergebnis ist, das alle leds eine zeit lang an sind dann wechselt es
und fast alle sind aus, bis auf ein paar die leuchten noch in geringer
intensität,
was ich komisch finde ist das ich keine wirklichen rechtecksignale mehr
an DIN und CLK messen tue, genauso sieht maeine schwingung am quarz nict
wirklich sinusförmig aus????
gruss
s.
Hallo Sebastian,
Die Schwingung die du am Quarz misst, muss nicht Sinusförmig sein. Wenn
da was faul wäre, würde der Controller überhaupt nicht arbeiten und du
würdest ihn noch nicht mal programmiert bekommen.
Zu den LEDs die noch schwach leuchten: welchen Wert haben die
Widerstände die jeweils von Pin 18 gegen +5V bei den 7219 geschaltet
sind?
Gruß
Udo
nabend Udo,
die "Vorwiderstände" haben 22KOhm,.....ich weis solangsam echt nimma,
manchmal denk ich das die Max7219 was abbekommen haben????
vorhin hat ich es einmal das alle an und alle aus waren, glaube das war
aber ein zufall :(
was ist mit dem 47µF der bei mir in meinem alten Schaltbild ein 100nF
war,....das mit dem widerstand vor reset ist glaub ich ok, das ist ja
nur der pullup für den reset,oder??
gruss
s.
Vorwiderstände?? Das sind keine Vorwiderstände, diese Widerstände dienen
dazu den max. Strom durch die LEDs einzustellen.
Tausch diese Widerstände mal gegen 30KOhm oder 39KOhm aus.
Ob nun 0,47µF oder 0,1µF ist ziemlich egal. Wenn du 0,1µF drin hast ist
es auch gut.
Genau, das ist der PullUp-Widerstand für die Reset-Leitung
....hehe
ok dann halt keine vorwiderstände, habs ja auch in " " gestellt, werd
ich morgen machen, hab grad leider keine da......bin mal gespannt ob das
was bringt, aber irgendwie sind mir die zustände der matrix alle zu
undefiniert, sag mal wo hast du die 7219er hergehabt, hab ne seite im
netz gefunden da will derjenige aber 23 euro für die dinger,.....soweit
ich weis liegen die zwischen 8-10 euros!!!
gruss
s.
...glaub ich werde morgen mal ein video drehen, mit allem ,
wie ich das dinge compilere, was ich einstelle,oszi signale, jeden
handgriff und natürlich auch die matrix...
s.
moin,
so eine Nacht drüber geschlafen, was mit eingefallen ist,
das mit dem ISETabgleich könnte echt für mich wichtig sein, ich habe
meine Matrix mit superhellen LEDs aufgebaut, da diese LEDs schon bei
geringem Strom relativ hell leuchten, könnte das ein Teil meiner
Problemlösung sein, könnte wohlgemerkt ;)
hab aber gleich gestern nochmal drei 7219er geordert, für 4,48€ das
Stück!!!
soden muss mal los paar Widerstände kaufen
Gruss
s.