Seite 2 von 2

Re: Digitale PIO Karte ansprechen.

Verfasst: 02.04.2011 12:43
von - chris -
Was soll das?

Code: Alles auswählen


For i=0 To 6
  Debug @Byte(i)
Next

wohl eher so:

Code: Alles auswählen


For i=0 To 6
  Debug Byte(i)
Next


Re: Digitale PIO Karte ansprechen.

Verfasst: 02.04.2011 13:16
von H.Brill
Evtl. liegt es ja an dem Array.
Definiere mal für jedes Byte eine Variable.

Code: Alles auswählen

ADC.b
Portb.b
Portc.b
Portd.b
DatenPortB.b
DatenPortC.b
DatenPortD.b
und schicke die nacheinander rüber. Der AVR kann
sowieso nur Byte für Byte einlesen. Dann mal beides
probieren :

Code: Alles auswählen

WriteSerialPortData(port, @ADC)
WriteSerialPortData(port, @Portb)
usw.
oder
WriteSerialPortString(port, Chr(ADC))
WriteSerialPortString(port, Chr(Portb))
usw.
oder halt mal einzelne Strings evtl. mal
mit Chr(13).

Da gibts ja viele Möglichkeiten, die man ausprobieren
kann.

Wie sieht denn das Empfangen (Request) aus ?
Evtl. nimmt der AVR die Daten an und die Empfangs-
routine stimmt nicht. Da würde ich auch nur immer
byteweise empfangen :

Code: Alles auswählen

While AvailableSerialPortInput(port)
        ReadSerialPortData(port, @s_byte,1)
        ; s_byte ist eine Chr - Variable --> s_byte.c
        text2 = Chr(s_byte)
        ; hier mal testen, ob Bytes kommen
 Wend  
Wie oben schon gesagt, gibt es mehrere Möglichkeiten.

Re: Digitale PIO Karte ansprechen.

Verfasst: 02.04.2011 14:50
von Falko
µPIO.pdf
µPIO Software
in Profilab Expert werden noch weitere Links ausgegeben:

http://www.electronic-software-shop.com ... pio-c-2_28

Vielleicht kann man ohne Hardware damit was anfangen.
[Edit]
...PS: 49 € ist aber ganz schön teuer für so ein Board
mit USB + TTL Wandler, AVR, und ein paar Kleinigkeiten.
Er hätte auch dieses Board ungeflasht nehmen können.
http://www.electronic-software-shop.com ... pio-c-2_28
Dann hätte er ca. 20€ gespart, wenn er den AVR selbst über ISP programmieren kann.

Ich habe den Source oben nochmal angepasst, da es eigentlich sieben Bytes sind, die geschickt werden müssen.
Bei Dim.. müssten dann auch 7 angegeben werden, womit erst dann eine Antwort vom AVR ausgelöst werden
würde und daraufhin müssten 15 Bytes erst empfangen werden, die ausgewertet werden können.

[/Edit]


Gruß Falko

Re: Digitale PIO Karte ansprechen.

Verfasst: 03.04.2011 10:15
von tinux
Habe leider keine Ahnung von AVR programmieren.
Bin aber ein Stück weiter gekommen, da ich jetzt wenigstens eine Antwort vom AVR bekomme.
Das Delay(70) hat gefehlt.

Code: Alles auswählen

Dim Request.b(6)
Dim Response.b(14)

Request(0)=%000001
Request(1)=%111111
Request(2)=%111111
Request(3)=%111111
Request(4)=%111111
Request(5)=%111111
Request(6)=%111111

OpenSerialPort(6, "COM6", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1024, 1024)
Delay(70)

WriteSerialPortData(6, @Request(), 7)

ReadSerialPortData(6, @Response(), 15)

CloseSerialPort(6)

For i=0 To 14
  Debug Response(i)
Next
Debugger Ausgabe.

63
63
61
3
-1
3
-1
3
-1
3
-1
3
-1
3
-1

Gruß, tinux

Re: Digitale PIO Karte ansprechen.

Verfasst: 03.04.2011 11:16
von H.Brill
Da lag ich mit dem Delay() ja richtig.
Mußt halt nur in deiner Doku schauen, was
da zurück kommt bzw. wie es interpretiert
werden sollte.

Kommt halt darauf an, wie der AVR programmiert
ist. Also ob nur über Polling auf die Daten an der
RS232 gewartet wird, oder halt über Interrupt.
Ich machs am liebsten über Interrupt, da hier
keine Daten verloren gehen können.

Da die Karte (bzw. der AVR) auch selbst programmiert
werden kann, kannst auch mal bei http://www.myAvr.de
vorbeischauen.
Und die Demo von BASCOM kann bis 4 KB große Programme
compilieren. Das dürfte für kleine Sachen wie hier gerade reichen.
Ich habe mir auf mein AVR MK II Programmer einfach einen
10poligen Wannenstecker gelötet. Somit kann ich mit einem
Flachbandkabel auch andere Boards per ISP programmieren.

Re: Digitale PIO Karte ansprechen.

Verfasst: 03.04.2011 20:03
von Falko
Da PB ja auch die Ein und Ausgänge überwachen kann, könnte man
doch auch ohne dem delay folgendes machen, oder?

Code: Alles auswählen

;....
While AvailableSerialPortOutput(6)>0
  WriteSerialPortData(6, @Request(), 7)
Wend
;.....
While AvailableSerialPortInput(15)>0
  ReadSerialPortData(6, @Response(), 15)
Wend
;.....
Gruß, Falko