AT90PWM2/3 und Dali

Gast #763031
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.
Gast #767929
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
Gast #1197859
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
Gast #1197868
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!
Gast #1199267
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
Angehängte Dateien:
Gast #1201270
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;
  }
Gast #1201740
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.
Gast #1202878
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.
Gast #1212570
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;
Gast #1216332
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
Gast #1216598
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.
Gast #1217945
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
Gast #1220480
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?
Gast #1225653
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
Gast #1227147
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?
Gast #1229643
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren