Forum: Mikrocontroller und Digitale Elektronik PSoC: Programm läuft auf POD aber nicht auf Real-Chip


von A. B. (funky)


Lesenswert?

Hallo,

auch wenn sich hier nicht gerade viele PSoC Entwickler tummeln probiere 
ich mal mein Glück.

Ich programmiere auf dem Cypress PSoC 29466.

Ich habe mein Programm auf dem POD dafür entwickelt und alles läuft 
bestens.
Ein HexKeypad wird abgefragt und zusätzlich dei Daten von einem RFID 
Leser ausgewertet. Beides wird dann per UART an einen Rechner 
verschickt.

Auf dem POD läufts, und wenn ich es afu einen realen Chip brenne, funzt 
es nicht komplett.

Die Keypadauswertung funktioniert, und die Daten werden auch per UART 
verschickt. Doch die Ansteuerung des RFID-Lesers funktioniert dort nicht 
mehr komplett.

Weiß jemand wo genau die Unterschiede bestehen zwischen dem POD udn dem 
Real Chip? Bin gerade ein wenig Ratlos wo ich da nach Fehlern suchen 
soll. Denn die sonstige Schaltung ist ja die selbe.

Danke für Ideen,
funky

von Bernhard P. (Gast)


Lesenswert?

Hallo,

wie genau hast du die Kommunikation mit dem RFID Leser realisiert?
Programmiere auch den CY8C29466 und kann dir folgende seite wärmstens 
empfehlen, ist für PSoCs die absolut beste!

http://www.psocdeveloper.com/forums/

Unterschied zwischen POD und real Chip, das POD emuliert bloß, somit 
wird der Code nicht direkt reingeblasen sondern läuft nach wie vor auf 
dem PC (Debug).
Leider hab ich das Problem auch immer wieder das codes mitn POD funken 
und mitn Chip nicht so ganz.
Überprüfe mal deine Einstellungen bei Project --> Settings, Compiler.
Wenn du den CY8C29466 verwendest sollte enable Paging angeklickt sein, 
da der ja 8 Pages zu je 256Byte RAM hat (= 2kBYTE). Diese Einstellung 
hat z.B. keine Auswirkungen beim POD, beim Chip aber sehr wohl.
Vielleicht hast du auch ein Problem mit der Clock, die ändert sich 
leider auch zwischen POD und Chip (geringfügig, aber könnt dein Problem 
mitn RFID sein...)

Hoffe ich hab dir zumindest etwas helfen können, kann dir nur sagen das 
der PSoC ein absolut genialer Chip ist der sehr leistungsfähig ist wenn 
man richtig mit ihm umgeht.

mfg
Bernhard

von Bernhard P. (Gast)


Lesenswert?

Wenn du funkyjay bist hast die Seite ja schon vorher gefunden g

Bernhard

von funky (Gast)


Lesenswert?

hi,

ja im DeveloperForum habe ich auch schon gepostet und noch eine Anregung 
bzgl. der Spannungsversorgung bekommen. Ich habe da POD-powered 
ausgewählt, und evtl. hat das auch noch einen Einfluss wenn die Spannung 
für meinen Real-Chip nicht ganz sauber ist

Der RFID Leser ist ein fertiges Modul welcher mit zwei Leitungen an dem 
PSoC hängt. (Clock und Data) Die Clock liegt irgendwo im Bereich von 
100us-300us(bin momentan nicht in der Firma) und sollte ja eigentlich 
nicht allzuhohe Geschwindigkeitsanforderungen an den PSoC stellen.
Die Clock habe ich an einen Interrupteingang gehängt, und sobald die 
Clock losläuft, werden die Bits von der Datenleitung eingelesen.
Und da haut irgendwas mit dem Timing nicht hin. Es werden so wie es 
aussieht einzelne Bits verschluckt auf dem PSoC, weswegen mein Programm 
die Daten nicht auswertet und somit auch nix verschickt vom RFID Leser.

Die Clock hatte ich zu Anfang auch im Verdacht, aber da UART ja 
funktioniert(was wesentlich Clock.kritischer sein dürfte) sehe ich das 
momentan nicht als Hauptproblem an.

Die Ram-Einstellungen werde ich nochmal kontrollieren. Habe da nur mal 
was gelesen mit LargeMemoryModell usw. aber habe mich damit noch nicht 
tiefgehender beschäftigt. (Arbeite auch noch nicht sehr lange mit PSoCs)

Aber das der Code gar nicht richtig auf dem POD läuft wußte ich z.b. 
noch nicht.

Bin morgen wieder in der Firma und werde weiter testen. Evtl. gewinne 
ich dann ja noch paar neue Erkenntnisse

von Bernhard P. (Gast)


Lesenswert?

Hallo,
als wenn dein Port mit der clk le4_clk ist dann hast du den aber nicht 
interruptgesteuert gemacht...

Wenn du die Zustände am Datenport selber filtern musst, also kein Modul 
(UART) verwenden kannst, kann ich dir nahelegen es so zu probieren wie 
ich es mit dem Empfang von IR RC5 Code gemacht habe:

http://www.psocdeveloper.com/forums/viewtopic.php?f=3&t=4143
<
Die Ram-Einstellungen werde ich nochmal kontrollieren. Habe da nur mal
was gelesen mit LargeMemoryModell usw. aber habe mich damit noch nicht
tiefgehender beschäftigt. (Arbeite auch noch nicht sehr lange mit PSoCs)
<

Das ist im Prinzip nicht schwierig musst dir nur vorstellen, dass dein 
chip eben 8 pages zu je 256Byte RAM hat, muss man aufpassen wenn man 
eine ISR betritt, dass man auf die richtige Page zugreift, ist aber erst 
relevant wenn du sehr großen Code mit sehr vielen Variablen schreibst.

Ich kann dir nur sagen der PSoC ist ein geiles Teil (hat aber natürlich 
auch gewisse Nachteile), und alle die über den PSoC schimpfen haben 
darüber nicht viel Ahnung...
Es steht jedem Programmierer selbst zu ob ihm ein Chip sympathisch ist 
oder eben nicht.
Also lass dich nicht entmutigen, halte durch, der Anfang ist recht 
schwierig!

mfg
Bernhard

von Bernhard P. (Gast)


Lesenswert?

Ach ja noch was:
ISR (Interrupt Service Routinen) sind so kurz wie möglich zu halten (am 
besten in ASM), also in einer ISR switch case Anweisungen, mächtige 
Rechnerein und ähnliches sollte man unterlassen, ist besser in der ISR 
nur ein flag zu setzen und es im Hauptprogramm abzufragen.
Wenn nämlich ein Interrupt abgearbeitet wird und ein weiterer kommt 
hinzu wird der zweite hinten angereiht. Wenn du für den ersten 
allerdings z.B.: die doppelte Zeit brauchst als der zweite kommt, 
verlierst du den zweiten Interrupt, kann bei dir das Problem sein.

mfg
Bernhard

von funky (Gast)


Lesenswert?

hi,

ja ok...das mit der Interruptroutine muss ich vielleicht nochmal 
überarbeiten. Zuanfang habe ich in den Routine auch noch den UART Kram 
gemacht ;D Das wird aber jetzt alles in der Hauptschleife gemacht.

ja, aber eigentlich sollte LE_CLK einen Interrupt triggern.
le_clk habe ich auf einen digitalen Buffer gelegt, welcher mir dann den 
Interrupt auslösen soll(tut er ja auch auf dem POD)

Ich wollte nicht Keypad und RFID Int zusammen in den GPIO Interrupt 
packen, und soweit ich das gelesen habe hat man sonst nur die 
Möglichkeit mit diesen Dig_ENV User modulen wenn man einen Interrupt auf 
einen Pin legen will. Oder habe ich was übersehen?


Naja, zu Anfang habe ich schon auf den PSoC geschimpft, weil das mit dem 
Designer alles so neu war. Aber wenn man einmal das Konzept ansatzweise 
geschnallt hat, isses doch ne geile Sache. (Ich bin aber wie man sieht 
erst am Anfang und habe noch keine AHnung was man damit noch so 
anstellen kann. Gerade die Rekonfigurierbarkeit verwirrt noch sehr)

Aber das der Kram jetzt auf dem Chip nicht so läuft wie auf dem POD hat 
mir schon einen Dämpfer verpasst. Dachte ich könnte meinen Chef 
beeindrucken, aber war wohl nix ;D

von Bernhard P. (Gast)


Lesenswert?

Hallo,

>Dachte ich könnte meinen Chef
>beeindrucken, aber war wohl nix ;D

kenn ich von wo...

>ja, aber eigentlich sollte LE_CLK einen Interrupt triggern.
>le_clk habe ich auf einen digitalen Buffer gelegt, welcher mir dann den
>Interrupt auslösen soll(tut er ja auch auf dem POD)

Sorry, stimmt, hab ich übersehen.

Wenn ich mir dein main.c so ansehe glaub ich nicht das es notwendig ist 
das du die Tasten interruptgesteuert machst. Würde das mitn Buffer 
verschmeißen, die Tasten im 10msec Takt im while(1) abfragen und mir den 
GPIO Interrupt für die eingehenden Daten aufheben (ist Prioritäten 
Sache, wenn man bedenkt auf einem Taster bleibt man schon mal einige 
10msec drauf, bei eingehenden Daten siehts aber anders aus...)

Weiters ist es ratsam die Zeile:

M8C_ClearIntFlag(INT_CLR0, INT_MSK0_GPIO);   // Das Interruptflag fuer 
den GPIO Interrupt wird geloescht

vorm Verlassen des GPIO Interrupts zu schreiben, ist eine PSoC 
Eigenheit.

Verändere deine Software mal soweit, dass du auf die Tasten mal nicht so 
viel Rücksicht nimmst und schau mal was dein Leser dann macht.
Ich vermute stark das deine Tasten ISR zu lange ist und der PSoC den 
Datenstrom vom Leser deshalb nicht richtig erkennt.
Außerdem sollte man Tasten immer entprellen, wenn deine 
Versorgungsspannung nicht konstant ist, kann es sein, dass der PSoC 
Tastendrücker erkennt die keine sind...


mfg
Bernhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.