mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT90PWM2/3 und Dali


Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: olitheone (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

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

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß niemand was ich falsch mache? Was muss ich den beachten Matthias?

mfg Daniel

Autor: Gast12345 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
  }

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Willi71 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

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

Vielen Dank!!!

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab grad die lösung gefunden :-)

Autor: Mathes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Mathes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.