-
        

Ergebnis 1 bis 7 von 7

Thema: Max485 / Bascom Grundlagen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    16.04.2006
    Ort
    Nidda
    Alter
    44
    Beiträge
    12

    Max485 / Bascom Grundlagen

    Anzeige

    Hallo,

    ich möchte mir mit Max485 und Atmega 8 ein kleines Netzwerk aufbauen.
    Leider bin ich noch zimlicher Leihe was die Programmierung in Bascom angeht.
    Meine Frage:
    Entgegen einem RS232 Bus besteht bei einem max485 die Möglichkeit, bei einer Übertragung auf dem Bus, einen Interrupt auszulösen.
    Ich habe gehört dass es von der Bascom version abhängig ist, wie ich den Interrupt als Eingang benenne. Ist das richtig?
    Kann ich den selben Interrupt den ich als Melder für Busaktivitäten nutze auch als Ausgang genutzt werden um den Bus zu belegen und etwas zu senden?

    Danke schon mal im Vorraus für eure Antwort(en)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    der AVR an sich kann ja kein RS485, dieses wird meistens an den UART gehängt, und ein paar weitere Ports um die Richtung auszuwählen.
    Wenn der AVR nix versendet, würde ich den 485 auf Eingang stellen, und kann dann einen IRQ erzeugen lassen bei jedem Zeichen, das über den RS485 bzw. UART kommt, man muss das ja sowieso erst auswerten ob man gemeint ist.
    Wird also alles über die UART geregelt.

    Oder meinst Du mit IRQ eine extra Leitung, die zum Entsprechenden RS485-Teilnehmer führt, ist dann aber unabhängig vom RS485 ?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    16.04.2006
    Ort
    Nidda
    Alter
    44
    Beiträge
    12

    Max 485 am AVR

    Ja, ich möchte den UART sowohl zum Abhören der Leitung nutzen als auch zum ansteuern des MAX485 um dann etwas zu senden.
    Hast du dafür vielleicht ein Beispiel?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    37
    Beiträge
    464
    nimm doch einfach den URXC Interrupt.
    Der wird ausgelößt, wenn ein Byte im USARtpuffer drin ist.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    Ich glaub bei elkokiller ist da etwas verwirrt worden.
    nicht der Max485 löst den Interrupt aus.
    Der Max485 ist wie auch der Max232 nichts anderes als ein Schnittstellenbaustein, der für sich genommen dumm ist.
    Der 485 bekommt durch Steuerleitung gesagt sende oder empfange,
    beides gleichzeitig geht nicht, im Gegensatz zur RS232-Übertragung.
    Man nennt sowas auch Halbduplexbetrieb.

    Die rs485-Übertragung ist etwas knifflig insgesamt, es kommt sehr aufs Timing an. Die Datenrichtung wird ja wie beschrieben vom AVR bestimmt. Wichtig ist nun, das die Datenrichtung nicht von senden auf empfangen geschaltet wird während die UART noch Daten sendet. Du kannspert für die Ausgabe über UART den PRINT-Befehl benutzen oder auch einfach UDR=Byte setzen, aber, die Übertragung selbst läuft dann je nach Baudrate noch ne ganze Weile weiter, in welcher die 485 noch auf Senden stehen muß, damit die Daten ganz beim Empfänger ankommt. Dafür kannst Du den UTXC-Interrupt benutzen. Der wird ausgelöst wenn die Übertragung komplett ist.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.04.2005
    Beiträge
    1.469
    [quoete]die Übertragung selbst läuft dann je nach Baudrate noch ne ganze Weile weiter, in welcher die 485 noch auf Senden stehen muß[/quote]
    Genau darüber bin ich auch schon mal gestolpert
    Wenn man's nicht weiß, sucht man sich kaputt
    Ich nehme mal an, daß es die 2-Byte Hardware TXD-Buffer des AVRs sind,
    die das verursachen ?
    Ich warte jetzt einfach etwas, eben etwa 2 Byte lang, mit dem Umschalten und so klappt's auch ohne Interrupt.

    Gruß
    Christopher

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    ich habs dann so gemacht,

    on utxc puffer_leer
    enable utxc
    enable interrupts


    puffer_leer:
    waitus 7
    portb.0 = 0 ' (Pin für Senderichtungumschaltung)
    return
    end

    ok, ne Warteschleife hab ich auch drinne, aber das sind nur n paar zyklen, das geht noch. ich möcht den µC nicht 100 Milisekunden rumgammeln lassen, der wird gefälligst fürs Arbeiten bezahlt ... nix da Zigarettenpause

    (Ein Glück sind die Dinger nicht gewerkschaftlich organisiert, sonst hätt ich jetzt nen Generalstreik am Hals)
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •