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
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:
Beim Staver40 habe ich keine Ahnung wie das gehen soll?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
Habe es mit folgendem Programm probiert ob ich überhaupt über Seriell daten verarbeiten kann.
Kann mir irgend jemand bitte helfen, wie das Programm aussehen soll.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
Wie kann ich z. B. Pin PA1 auf High bzw low schalten.
Vielen Dank im Voraus!
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
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:
Funktioniert aber nicht. Wenn ich über RS232 Integer 1 sende wird nichts ausgeführt?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
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:
Funktioniert aber nicht. Wenn ich über RS232 Integer 1 sende wird nichts ausgeführt?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
Hallo,
als erstes musst Du eine Schleife um das Programm legen, damit es nach dem ersten durchlauf nicht schon beendet ist,
dann kannst Du ein Zeichen einlesen mit Input, dazu in der Bascomhilfe schauen,Code:Do ... hier ist der Programmteil der immer ausgeführt wird Loop
wenn man vorher eine variable als Int dimensioniert, wir die auch gleich noch umgewandelt.
Vielen Dank erstaml.
Leider komme ich nicht weiter.
Eigentlich weis ich nicht mal, wo ich den Inputbefehl reinschreiben soll.
Habe es so probiert:
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!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
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
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.
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:
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?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
Wie es aussieht, liest das CarrierBoard nichts an der RS232 aus.
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 ?
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.
Lesezeichen