mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik A6833 Ansteuerung?


Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute...

Ich habe hier noch ein paar A6833 von Allegro rumzuliegen.

http://www.allegromicro.com/en/Products/Part_Numbe...

Mit diesen würde ich gerne ein paar mehr LEDs ansteuern. Das ganze soll 
mit einem AVR in C geschehen. Allerdings werde ich aus dem Datenblatt 
leider überhaupt nicht schlau. Hat irgendjemand Erfahrungen mit diesem 
Chip oder Vorgängern? Oder gibt es gar irgendwo Code-Schnipsel die ich 
als Denk-Anstoß gebrauchen könnte??? Ich habe jedenfalls nichts 
gefunden.

MfG

Cha-Ko

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Und was verstehst du nicht?

MfG Spess

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, es ist das erste mal, dass ich so einen IC ansteuern will. Ich 
check so Avr technisch eingentlich alles, aber so richtig werd ich nich 
schlau, was ich wie senden muss...

Cha-Ko

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner ne Ahnung von dem Teil???

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das 
http://www.mikrocontroller.net/articles/AVR-Tutori... 
hast du aber schon gesehen, oder?
Lies einfach nur den Text, wenn du Assembler nicht magst.
Der Allegro-Chip wird fast genauso angesteuert (Ich habs nicht 
ausprobiert, nur das datasheet gelesen), aber: output-enable ist 
high-active, und es sind nicht 8 sondern 32 Bit.
Also:
- such dir im AVR-Datasheet den SPI-Modus raus, der genauso aussieht, 
die das Allegro -diagramm.
- stell denn SPI-Takt auf unter 10MHz
- schieb 4 Bytes in das Register
- schalte den strobe kurz an
- OE kannst du erst mal mit Pull-Up an Vcc legen

hth. Jörg

Autor: Cha_Ko (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ok, danke erstmal...

Ich habe jetzt mir jetzt SPI mal nen bisschen angeguckt und bin soweit 
wie im Anhang. SDI hängt an MOSI, Clock an SCK und Strobe an SS. Nur wie 
muss mein Programm jetzt erweitert werden, bzw. aussehen, damit z.B. 
jede zweite LED leuchtet.

Cha_Ko

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keiner der helfen kann???

Autor: Jörg X. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Damit jede zweite LED leuchtet kannst du z.B. mal 0xAA in das Register 
laden (oder 0x55).
Du musst da nicht unbedingt ein Array benutzen, ein "unsigned long int", 
bzw. "uint32_t" geht ja auch. Aber wenn du das Array benutzt, musst du 
da irgendwann was reinschreiben:
// Array fuer die Daten 
unsigned char serpa[SERPA_SIZE] = {0xAA, 0xAA, 0xAA, 0xAA};
 ;)

Welchen Chip verwendest du eigentlich?

Ich hab da mal was zusammengetippt (im Anhang), aber ich hab keinen 
Compiler hier, also keine Garantie auf nichts ;)

hth. Jörg

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int main(void)
{
    spi_init();
    set_a6833(0xaa00550fL);

wird hier 0xAA in das register geladen?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wird hier 0xAA in das register geladen?
Nein?! da wird 0xaa00550f in das 32Bit-schieberegister geladen - was dem 
Muster "0b10101010 00000000 01010101 00001111" entsprechen sollte (ob 
eine leuchtende LED die 1 oder die 0 ist, hängt davon ab, wie die LEDs 
angeschlossen sind).
Die Zahlendarstellung (dezimal, hexadezimal, binär,...) solltest du 
evtl. (noch-) mal nachlesen ;-)

hth. Jörg

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach man, ja is klar...seh schon den wald vor lauter bäumen nich mehr...
hmmm ich benutze den Atmega 32...SCK liegt an PB7, DATA In an PB5 und SS 
an PB4, richtig oder??? beim schreiben des uC kommt bei mir immer eine 
Fehlermeldung, wegen Kurzschlusses an SCK, da ja der Port auch an der 
ISP Schnittstelle liegt???
Wo liegt das Problem?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns die Teile hier irgendwo in SMD (tqfp zB) gäbe, dann würd ich mir 
paar zulegen, aber so werd ich weiterhin den guten alten 74hc595 einfach 
viermal nehmen..

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wegen Kurzschlusses an SCK
Du bist sicher, dass da keiner ist ? ;)
Ansonsten: zur Sicherheit 1kOhm jeweils in MOSI und SCK zwischen AVR und 
Schieberegister, so dass ISP ohne Widerstände mit dem AVR verbunden ist.

hth. Jörg

ps.: und evtl. einen Pull-Down an die Strobe-Leitung, damit dei LEDs 
nicht flackern

Autor: Cha_Ko (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
oh man:( also...alle verbindungen gecheckt, widerstände so wie du es 
gesagt hast, keine kurzschlüsse mehr, programmieren geht ohne probleme, 
aber es passiert rein garnichts:( bist du dir sicher, dass dein code so 
wie er is stimmt??? ich hab keine ahnung, wo der fehler noch sein 
könnte??? hab den code, so wie ich ihn jetzt in den avr schiebe nochmal 
angehängt.

vielen dank

Cha_Ko

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte die init-Einstellungen nicht nachgeprüft - ich dachte, das 
schaffst du auch allein ;) --
(Seite 4 - a6833 datasheet / seite 139 - Atmega32 Datasheet)
 Aber probier mal "SPI Mode 0":
void spi_init(void)
{
    SPIDDR = (1<<MOSI)|(1<<SCK);
    CSDDR = (1<<CS);
    SPIPORT = (1<<MISO);

    /*
     * SPI als Master
     * MSB zuerst 
     * SCK Ruhepegel ist im Datenblatt LOW!
    SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPOL);
     */
    //NEU: Mode 0, keine CPOL, kein CPHA
    SPCR = (1 << SPE) | (1 << MSTR);

    // Zur Sicherheit nur F_CPU /4
    // SPSR |= (1 << SPI2X);
}
Und bitte beschreibe (nächstes Mal?) genauer WAS alles nicht geht, was 
du erwartest, wie du misst, etc..

hth. Jörg

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, beim anlegen der power supply gehen einige leds mit an, jedoch 
jedesmal andere, ohne erkennbares muster oder system. zu erwarten wäre 
ja eigentlich, dass die ausgänge so geschaltet werden, wie sie sollen, 
oder?;)

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass direkt nach dem Power-On kurz Müll angezeigt wird, ist logisch, 
WENN du "Output Enable" auf High-Pegel gelegt hast, aber dann sollte der 
AVR da ein festes Muster reintakten(?).
- Die Leds sind korrekt angeschlossen? (Anode über Vorwiderstand an Vcc, 
leuchten bei logisch 0, wegen den Darlington-Ausgängen des A6833)
- Beide Chips haben gleiche Masse/Vcc?
- kannst du vielleicht mal "output enable" auch am AVR anschließen, und 
erst in  "main()" einschalten?
- Es gibt keine (Fehler-)Meldungen beim Compilieren?
- Hast du mal mit dem Muster gespielt? (mal 0x00 nehmen oder 0xffffffff 
etc..)

(evtl. merkst du, dass ich nur schwer Fehler in deiner Schaltung 
erkennen kann ;) )

hth. Jörg

ps.: der AVR funktioniert aber, oder?

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, das mit OE hab ich getestet, immernoch das gleiche...auch eine 
Veränderung des Musters bringt nichts. den AVR hab ich nochmal mit 2 
anderen Programmen getestet, dort tut er was er soll.
So richtig habe ich das noch nicht mit dem SS verstanden...Dort wird 
nach der Übertragung ein kurzes Signal gesendet, sodass die Daten aus 
dem Latch in die Outs geschrieben werden, oder? Der Strich darüber 
bedeutet "negiert"??? hat das was zu bedeuten?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bring (bitte) nicht die verschiedenen Chips/Datenblätter durcheinander!
der A6833 hat weder \CS ("Zeh Ess quer")(btw. hat der garnicht), noch 
\OE noch \RCK.
 Alle Signale bei diesem Chip sind "active-high", d.h. die reagieren auf 
High-Pegel oder positive Flanke.

Wenn der SS-Pin vom AVR auf Eingang und SPI als Master eingestellt 
ist, (nur!) dann schaltet der AVR in den Slave-Modus, und bricht die 
SPI-Übertragung ab. Ist eine Falle, aber hier ist der SS-Pin ja ein 
Ausgang.

Warum hast du denn die Endlosschleife aus dem Code gelöscht ??? (seh' 
ich jetzt erst - in meinem Programm war doch eine drin)
Ich bin mir nicht sicher was der Compiler macht, wenn die main() zu Ende 
ist...

hth. Jörg

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DIe Endlosschleife hatte ich ausversehen draußen, aber im Code is sie 
noch drin auf dem AVR.
Aber CS ist doch SS, oder?? irgendwie komm ich durcheinander...also PB4 
vom AVR auf STROBE vom A6833, richtig?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber CS ist doch SS, oder?? irgendwie komm ich durcheinander...also PB4
> vom AVR auf STROBE vom A6833, richtig?

ja, das stimmt so
(es würde auch auf irgendeinem anderen Pin gehen, solange der SS Pin 
Ausgang ist  oder Eingang und highpegel hat).

hth. Jörg

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab noch nen Tip bekommen:


""Die beiden ersten Anweisungen in der Funktion "spi_init(void)" 
schreiben in das gleiche Register. Damit machst du zuerst MOSI und SCK 
zu Ausgängen und anschliessend überschreibst du DDRB wieder, und in 
PORTB ist nur noch CS ein Ausgang...

Wieso schreibst du nicht einfach
"DDRB = (1<<SCK) | (1<<MOSI) | (1<<CS);" ? ""

geht aber auch nich, kann das trotzdem was sein?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das ist ein Fehler :(
Da muss mindestens "CSDDR |= (1<<CS);" hin -- sry, mein Fehler

Hast du mal
a) alle 4 SPI-Modes (->CPOL, CPHA)
b) niedrigieren SPI-Takt
ausprobiert ?
und sicherheitshalber den Programmer abgesteckt?

? Jörg

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm eine Fehler gefunden:D

"while( !(SPSR & (1<<SPIF) ) );"
nicht
"while( !(SPCR & (1<<SPIF) ) );" !!!!


Danke nochmal für deine HILFE, echt super von dir:)

Danke Danke Danke;)

lg

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hmmm eine Fehler gefunden
Oh Sh...! ;)

Geht's jetzt?

:-D Jörg

Autor: Cha_Ko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, jetzt gehts;) danke nochmals

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.