Forum: Mikrocontroller und Digitale Elektronik AT90PWM2/3 und Dali


von Sebastian (Gast)


Lesenswert?

Hallo,

ich habe eine Frage zu dem AT90PWM2/3 der das DALI Protokoll beherrschen 
soll.
Heißt das nun das der Microkontroller direkt ein Steuersignal für ein 
Dali-EVG erzeugen kann? Leider werde ich nicht daraus schlau wenn es 
heißt das der Kontroller das Dali-Protokoll unterstützt.

von olitheone (Gast)


Lesenswert?

Hi

Hab zwar noch nicht mit dem PWM2/3 gearbeitet (dafür schon mit DALI) 
aber was ich gesehen habe erzeugt der Controller (sofern richtig 
konfiguriert) grundsätzlich schon ein richtiges DALI Signal (also 16Bit 
Frame, bi-phase) - nur halt auf Logikpegel (so wie ein normaler Uart 
auch, wo du dann noch z.B. einen MAX232 dranhängst um RS232 Pegel zu 
haben).
Um EVG's anhängen zu können brauchts also noch ein wenig 
Außenbeschaltung. Hier gibts einige Aplikationnotes dazu (google mal ein 
wenig dann findest du sicher was - "dali schematic" z.b.). Unsere Lösung 
in der Firma besteht im wesentlichen aus 2 Optokopplern, 4 Dioden, 1 
Z-Diode, 1 Transistor und 2 Widerständen.

Beachte aber das du auch noch ein Dali-Netzteil benötigst welches den 
Bus entsprechend versorgt.

MfG Oli

von Daniel (Gast)


Lesenswert?

Hallo,

ich arbeite zur Zeit an einem Projekt an der HTL, ebenfalls mit einem 
AT90PWM2. Jedoch ist es mir noch nicht gelungen, den µC richtig zu 
konfigurieren. Hat es bei dir geklappt? Wenn ja, könntest du mal den 
Programm-Code posten? Es wäre nett, wenn sich sonst noch jemand melden 
würde, der Ahnung von dem Thema hat.

mfg Daniel

von Matthias (Gast)


Lesenswert?

>Jedoch ist es mir noch nicht gelungen, den µC richtig zu
>konfigurieren.

Sehr weitläufige Beschreibung des Problems...

Was genau will denn nicht funktionieren?
Welche Revision hast Du von dem Teil? Die Erste Serie A oder schon ein 
B?
Die A hatte auch noch ein paar nette Bugs bzw. ein paar Kleinigkeiten, 
auf die man achten muss!

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Ich versuche ein DALI-Frame zu schicken mit 16 Bit, jedoch kommen nur 
die ersten 8 richtig an, die anderen 8 haben für mich keine Logik. Das 
Bit-Muster sieht fast immer gleich aus. Ich benutze den AT90PWM2B Ich 
poste mal mein Programmcode und das Ausgangssignal:

#include "io.h"
#include <avr/interrupt.h>
#include "signal.h"
#include <util/delay.h>

  void EUSART_Transmit_data( unsigned int data )
  {
  // Wartet, bis Transmit lehr ist
  while ( !( UCSRA & (1<<UDRE)))
  //Die datei wird in den Buffer geladen und dann gesendet
  EUDR = data>>8;
  UDR = data;
  }

int main (void)
{
  //UCSRA =
  ;
  UBRRL = 50;  //Setzt Baudrate des Transmitters auf 1200;
  UCSRC = 0b00001000; //Setzt die Stop-Bits auf 2;
  MUBRR = 833; //Setzt Baudrate des reveivers auf 1200 und Frequenz auf 
1MHz
  EUCSRA = 0b10110111; //Hier wird die Anzahl der zu senden Bits 
eingestellt (16)
  EUCSRB = 0b00011010;  //EUSART-Mode wird eingeschaltet
  UCSRB = 0b00011000;  //EUSART Transmitter wird eingeschaltet
  unsigned int data = 0b1010100101111001;
  //unsigned int data = 0b1001111010010101;

  EUSART_Transmit_data(data);



  while(1)
  {
  }
}

Wie man im Bild sehen kann, sind die ersten 8 Bit richtig, die anderen 
nicht mehr. Es sollte eigentlich gleich aussehen, wie das Bsp. im 
Datenblatt des µC.

vielen Dank für die Hilfe!

mfg Daniel

von Daniel (Gast)


Lesenswert?

Weiß niemand was ich falsch mache? Was muss ich den beachten Matthias?

mfg Daniel

von Gast12345 (Gast)


Lesenswert?

Da ist ein Fehler....


void EUSART_Transmit_data( unsigned int data )
  {
  // Wartet, bis Transmit lehr ist
  while ( !( UCSRA & (1<<UDRE)))
  {
  };
  //Die datei wird in den Buffer geladen und dann gesendet
  EUDR = data>>8;
  UDR = data;
  }

von Daniel (Gast)


Lesenswert?

Sollte es mit diesem Code funktionieren? Es erscheint mir ein bisschen 
komisch, dass dieser Teil falsch sein soll, weil es eigentlich direkt 
aus dem Datenblatt genommen wurde. Werde es aber trotzdem mal 
ausprobieren.

von Willi71 (Gast)


Lesenswert?

Also dafinitv wartet die erste Version nicht bis der Puffer leer ist, 
sondern schiebt permanent die Daten un EUDR.
Es fehlen die Blockklammern, oder ein simples Semikolon.

  while ( !( UCSRA & (1<<UDRE)))
  //Die datei wird in den Buffer geladen und dann gesendet
  EUDR = data>>8;



Des weiteren würde Ich jedoch empfehlen die verwendete Schaltung auf 
Standardkonformität - insbesonere im Punkt "Flankensteilheit" - zu 
Prüfen.

von Daniel (Gast)


Lesenswert?

Danke Gast12345 und Willi71, die Klammern waren schuld. Habs jetzt so 
gemacht, wie ihr es mir geschrieben habt und jetzt gehts.

Vielen Dank!!!

von Michael (Gast)


Lesenswert?

Hallo  Daniel,
hab das gleich problem was du hast.
bin zur zeit auch am probieren.
las uns mal die mail tauschen um besser sich auszutauschen

von Michael (Gast)


Lesenswert?

Hallo Experte, hab eine Frage zu dem Register
warum steht da die 50 und das andere Register UBRRH nichts?
kann mir jemand das beantworten.
Danke

UBRRL = 50;  //Setzt Baudrate des Transmitters auf 1200;

von Michael (Gast)


Lesenswert?

hab grad die lösung gefunden :-)

von Mathes (Gast)


Lesenswert?

An alle Profis hier,
hab den Code mit dem gleichen at90pwm216, versucht grad zu übernehmen 
und an max232 zu übertragen. zeigt natürlich nichts an.

wer weis warum nicht?

von Daniel (Gast)


Lesenswert?

Tut mir leid für die späte Antwort. Auf das UBRRL-Register bin ich durch 
probieren drauf gekommen.

An Mathes: Hast du konrolliert, ob die Register auch in deinem µC 
vorhanden sind? Ich habe bei den meisten Register ein Kommentar 
dazugeschrieben, vergleich mal im Dattenblatt, ob die Funktionen 
übereinstimmen. Kannst du den Code ohne Fehler kompelieren?

mfg Daniel

von Mathes (Gast)


Lesenswert?

ja hab ich, benutze aber ein EXternen Quartz 4 MHz,
benutze den at90pwm216 auf dem stk520 bord.
die register sind die gleichen. hatte auch so gemacht befor ich dein 
code gesehen hab. es funkts bis heut nicht.

was mich noch verwundert ist das die dali klem. auf dem stk520 nur eine 
span. von 5 volt hat und der dali benötigt doch viel höchere spannung 
für transmit.

von Daniel (Gast)


Lesenswert?

Du bekommst keine Fehlermeldungen beim compelieren und keine Fehler beim 
Programmieren des µC's? Probier mal einfach einen Port immer wieder zu 
toggeln, in dem du eine while-Schleife benutzt, um zu sehen, ob der Port 
das macht, was du ihm programiert hast.

mfg Daniel

von Mathes (Gast)


Lesenswert?

hallo, die while steht bei mit in der main()
while(1)
   {
      EUSART_Transmit(s);

   }
nur wenn ich den baten neben con. drück und zwar den write flash memory 
findet die übertragung stat, sonst nicht. das ist auch nicht normal.
hast du bei deinem dali code die Interrupts auch benutzt?

von Mathes (Gast)


Lesenswert?

Daniel ich hab heut den register sogar auf 8 bit in senderichtung 
umgestellt, er sendet aber viel mehr bits als die 8. warum, was mache 
ich falsch?

mfg
mathes

von Daniel (Gast)


Lesenswert?

Ich habe als erstes auch den STK500 verwendet, da hat die Programmierung 
nur bis ca. zur hälfte geklappt. Jetzt verwende ich den AVR-Dragon, mit 
dem geht es ohne Probleme. Post mal deinen Code, vielleicht seh ich da 
was falsches. Ich hab keine Interrupts verwendet, immer mit dem Reset 
den µC geresetet.

mfg Daniel

von Mathes (Gast)


Lesenswert?

Ich verwende stk500 und oben drauf den stk520 für den at90pwm216.
Hab dein code übernommen außer in der main funktion die werte:

UBRRL = 207;  //hab 4 MHz extern Quarz
MUBRR = 833;

es kann bestimmt noch an den Fuse Bits liegen, laut datenblatt muss 
Register
CKSEL3..0 1111-1110 haben. wenn ich Con. kommt da so ein Fenster mit 
Fuse Bits. da gibts das register nicht :-)

hast vieleicht eine idee?

von Daniel (Gast)


Lesenswert?

Ja das kann sein, dass etwas mit den Fuses nicht stimmt. Mit einem Fuse 
kann man einstellen, was für ein Quarz man hat (extern oder intern). 
Kann dir leider aber grad nicht nachschauen. Ich kann dir aber morgen 
nachschauen, wie das Fuse bei mir heißt.

mfg Daniel

von Mathes (Gast)


Lesenswert?

Ich denke ich habs, muss morgen mit einem Oszi nachschauen was ich da 
Sende.
Hab den Exter Quarz von 4MHz und Eingestellt von 3 -8 MHz

von Mathes (Gast)


Lesenswert?

Hallo Daniel,

meine Bits sind ok,
jetz sofort die nächste frage.
wie hast du den DALI Bus mit spannung versorgt?
wenn du in besitz einer schaltung bist kannst du die mal hier posten.

mfg
mathes

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.