- LiTime Speicher und Akkus         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Pin auf High setzen Staver40/Atmega32 -> Bin Neuling

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2006
    Beiträge
    10

    Pin auf High setzen Staver40/Atmega32 -> Bin Neuling

    Anzeige

    Powerstation Test
    Hallo zusammen,

    habe das Entwicklerboard für den Staver40 von AVR und den Staver40 MC.

    Bisher habe ich ausschließlich mit BasicStamps von Parallax gearbeitet.

    Arbeite jetzt mit Bascom und dem built in Programmer über RS232 um den MC zu programmieren. Ein paar Test-Programme laufen auch.

    Jetzt zu meinem Problem:
    Ich möchte ein Programm schreiben, das am Seriellen Port auf einen Integer-Wert wartet und dann einen bestimmten Pin auf "High" schaltet, damit ich meine Relais damit schalten kann.

    Mit dem BasicStamp geht das ziemlich einfach:
    Code:
    ' {$STAMP BS2p}
    ' {$PBASIC 2.5}
    
    
    rpin CON 16
    bmode CON 240
    maxtime CON 10000
    signal VAR Byte
    i VAR Byte
    
    Main:
    
    SERIN rpin,bmode,maxtime,timeout,[signal]
    ' Timeoutschleife für seriellen
    timeout:
    PAUSE 20
    GOTO main
    
    
    IF signal = 1 THEN  irst
    
    irst:
    High 1 'Pin 1 einschalten
    High 2 ' Pin 2 einschalten
    Beim Staver40 habe ich keine Ahnung wie das gehen soll?

    Habe es mit folgendem Programm probiert ob ich überhaupt über Seriell daten verarbeiten kann.

    Code:
     $regfile = "M32DEF.DAT"                                     ' Mega32
    $crystal = 14745600                                         ' StAVeR-40 XTAL
    $baud = 9600
    
    Dim S As Integer
    Dim Mybaud As Long
    Do
    'Daten empfangen
    Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 1
    'Daten senden
    Serout S , 0 , D , 1 , Mybaud , 0 , 8 , 1
    Wait 1
    Loop
    
    End
    Kann mir irgend jemand bitte helfen, wie das Programm aussehen soll.
    Wie kann ich z. B. Pin PA1 auf High bzw low schalten.

    Vielen Dank im Voraus!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.12.2005
    Ort
    @FFM
    Alter
    47
    Beiträge
    408
    also ich weiß nicht ob ich verstehe was du meinst aber mit der Anweisung
    set porta.1
    reset porta.1
    schaltest du pin a1 auf high und low

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2006
    Beiträge
    10
    Guten Morgen,

    wie ich die Pins schalte, ist mir jetzt bekannt. Danke.

    Das Problem ist, das ich über die RS232 Schnittstelle Daten senden möchte.

    Ich habe versucht das mit folgendem Code zu lösen:


    Code:
    $regfile = "M32DEF.DAT"                                     ' Mega32
    $crystal = 14745600                                         ' StAVeR-40 XTAL
    $baud = 9600
    
    
    
    Dim S As Integer
    Dim Mybaud As Long
    
    Mybaud = 9600
    
    Config Porta = Output
    
    
    Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 1
    
    If S = 1 Then
    
    Wait 2
    Porta.0 = 1
    Porta.1 = 1
    Porta.2 = 1
    Porta.3 = 1
    Porta.4 = 1
    Porta.5 = 1
    Porta.6 = 1
    Porta.7 = 1
    Wait 2
    Porta.0 = 0
    Porta.1 = 0
    Porta.2 = 0
    Porta.3 = 0
    Porta.4 = 0
    Porta.5 = 0
    Porta.6 = 0
    Porta.7 = 0
    Wait 2
    
    End If
    Funktioniert aber nicht. Wenn ich über RS232 Integer 1 sende wird nichts ausgeführt?

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2006
    Beiträge
    10
    Guten Morgen,

    wie ich die Pins schalte, ist mir jetzt bekannt. Danke.

    Das Problem ist, das ich über die RS232 Schnittstelle Daten senden möchte.

    Ich habe versucht das mit folgendem Code zu lösen:


    Code:
    $regfile = "M32DEF.DAT"                                     ' Mega32
    $crystal = 14745600                                         ' StAVeR-40 XTAL
    $baud = 9600
    
    
    
    Dim S As Integer
    Dim Mybaud As Long
    
    Mybaud = 9600
    
    Config Porta = Output
    
    
    Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 1
    
    If S = 1 Then
    
    Wait 2
    Porta.0 = 1
    Porta.1 = 1
    Porta.2 = 1
    Porta.3 = 1
    Porta.4 = 1
    Porta.5 = 1
    Porta.6 = 1
    Porta.7 = 1
    Wait 2
    Porta.0 = 0
    Porta.1 = 0
    Porta.2 = 0
    Porta.3 = 0
    Porta.4 = 0
    Porta.5 = 0
    Porta.6 = 0
    Porta.7 = 0
    Wait 2
    
    End If
    Funktioniert aber nicht. Wenn ich über RS232 Integer 1 sende wird nichts ausgeführt?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,

    als erstes musst Du eine Schleife um das Programm legen, damit es nach dem ersten durchlauf nicht schon beendet ist,
    Code:
    Do
    ... hier ist der Programmteil der immer ausgeführt wird
    Loop
    dann kannst Du ein Zeichen einlesen mit Input, dazu in der Bascomhilfe schauen,
    wenn man vorher eine variable als Int dimensioniert, wir die auch gleich noch umgewandelt.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2006
    Beiträge
    10
    Vielen Dank erstaml.

    Leider komme ich nicht weiter.

    Eigentlich weis ich nicht mal, wo ich den Inputbefehl reinschreiben soll.

    Habe es so probiert:
    Code:
    $regfile = "M32DEF.DAT"                                     ' Mega32
    $crystal = 14745600                                         ' StAVeR-40 XTAL
    $baud = 9600
    
    
    
    Dim S As Integer
    Dim Mybaud As Long
    
    Mybaud = 9600
    
    Config Porta = Output
    
    Do
    
    Input S
    Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 1
    
    If S = 1 Then
    
    Wait 2
    Porta.0 = 1
    Porta.1 = 1
    Porta.2 = 1
    Porta.3 = 1
    Porta.4 = 1
    Porta.5 = 1
    Porta.6 = 1
    Porta.7 = 1
    Wait 2
    Porta.0 = 0
    Porta.1 = 0
    Porta.2 = 0
    Porta.3 = 0
    Porta.4 = 0
    Porta.5 = 0
    Porta.6 = 0
    Porta.7 = 0
    Wait 2
    
    End If
    
    Loop
    Tut sich wieder nichts. Stimmt den überhaupt meine Pinbelegung bei SERIN? Welcher Pin ist denn der SIN bzw. RxD? Habe Port D und Pin 0 eingetragen, glaube aber nicht dass das stimmt!

    Kannst du mir vielleicht ein paar Zeilen dazu Schreiben? Bin echt am verzweifeln obwohl die Lösung sicherlich einfach ist, wenn man sie kennt.

    Danke im Voraus

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Du kannst das Serin ganz weglassen, denn das Input macht das alles alleine.

    sonst schauts gar ned so schlecht aus,
    Input wartet, bis über die UART was rein kommt,
    danach wird der Wert per If abgefragt,
    und beim Loop gehts wieder von vorne an.
    Sollte doch was tun !

    Allerdings nur, wenn der M32 wirklich mit den angegebenen MHz läuft !
    Evtl. mal probieren im Programm statt den 14MHz einmal 1MHz oder 8MHz angeben, wenn sonst nix geht !
    Dann musst Du dir die Beschreibung der Fusebits anschauen, wenns danach geht.

    Wenn Du den ganzen Port auf einmal setzen oder löschen willst, kann mans auch so schreiben:
    Porta = &B11111111
    dann wird das Programm etwas kürzer.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2006
    Beiträge
    10
    Hi,

    die Mhz stimmen.

    Die technischen Daten sind:

    ATmega32 8Bit RISC Mikrocontroller mit 14,745MHz Quarztakt
    32KB Flash
    1KB EEPROM
    2KB RAM
    USART, SPI, IIC
    2x 8Bit, 1x 16Bit Timer
    2x ext. Interrupt
    bis zu 28 digitale I/Os
    8x 10Bit A/D-Wandler
    2x 8Bit D/A-Wandler
    32KB serielles EEPROM (I2C)
    DS1307 Real Time Clock (I2C)
    ISP-Schnittstelle
    RS232 Schnittstelle bis 115kBd mit ESD-geschütztem Treiber
    Bootloader für einfachen Download via RS232
    erweit. Temp.bereich: -40..+85°C


    Habe das Programm jetzt abgeänder:

    Code:
    $regfile = "M32DEF.DAT"                                     ' Mega32
    $crystal = 14745600                                         ' StAVeR-40 XTAL
    $baud = 9600
    
    Dim S As Integer                                            ' Sende Integerwert
    Dim Mybaud As Long
    
    
    Config Porta = Output
    
    Do
    
    Input S                                                     ' Warte auf Input von RS232
    
    
    If S = 1 Then                                               'Wenn Input Integer 1 dann
    
    Porta.0 = 1
    Porta.1 = 1
    Porta.2 = 1
    Porta.3 = 1
    Porta.4 = 1
    Porta.5 = 1
    Porta.6 = 1
    Porta.7 = 1
    Wait 2
    Porta.0 = 0
    Porta.1 = 0
    Porta.2 = 0
    Porta.3 = 0
    Porta.4 = 0
    Porta.5 = 0
    Porta.6 = 0
    Porta.7 = 0
    Wait 2
    
    End If
    
    Loop
    Tut sich leider nichts. Im RS232 Buffer sehe ich das ich "1" Integer gesendet habe, aber der RS232 Buffer wird nicht ausgelesen. Beim Staver40 ist der RxD auf Pin 1. Muss ich den sepparat initilisieren?

    Wie es aussieht, liest das CarrierBoard nichts an der RS232 aus.

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hast Du 'nen Link zu dem Board, damit man sich das mal angucken kann, muss man die Sachen selber verdrahten, oder ist das am Board schon gemacht ?

    Das Programm passt ansonsten so, es kann nur an der Verkabelung liegen, oder an den MHz !

    Wie weisst Du das es sicher die 14MHz sind, selber die Fusebits gesetzt/überprüft ?

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    06.05.2006
    Beiträge
    10
    Hi,

    die Fusebits habe ich nicht selber gesetzt.

    http://elmicro.com/de/staver40.html

    Hier ist der Link zum Staver40 und dem zugehörigen Carrier Board.

    Dnake nochmal.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiTime Speicher und Akkus