1-Wire Projekt, Code Hilfe C

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 25 11 2024  19:41:59      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( Vorherige Seite 1 | 2 | 3 | 4 | 5 Nächste Seite )      


Autor
1-Wire Projekt, Code Hilfe C

    







BID = 936335

trafostation

Schriftsteller



Beiträge: 595
 

  


Build succesfull !, aber leider funktioniert die Sache noch nicht.
Es geht leider nur Button1, und meine Test LED leuchtet jetzt plötzlich nur noch ganz schwach ! (nein ist nicht kaputt) sehr seltsam warum denn das ?
Auf Button2 tut sich gar nichts.

Zeile 85: else if, stimmt das ?

[ Diese Nachricht wurde geändert von: trafostation am 31 Aug 2014 20:30 ]

BID = 936339

Maik87

Schriftsteller



Beiträge: 856
Wohnort: Wesel / Niederrhein

 

  


Zitat :
trafostation hat am 31 Aug 2014 20:27 geschrieben :

Build succesfull !


Guter Anfang!


Zitat :

aber leider funktioniert die Sache noch nicht.

Schade!


Zitat :

Es geht leider nur Button1, und meine Test LED leuchtet jetzt plötzlich nur noch ganz schwach ! (nein ist nicht kaputt) sehr seltsam warum denn das ?

Ich habe ein ganz bischen den Code schneller gemacht. dazu habe ich in Zeile 95 und 113 den delay nur laufen lassen, wenn die Taste zuvor gedrückt war. Scheinbar ist nun die PWM für die LED zu schnell.

Füge mal unter "//ENDE: neue iButton anlernen" in Zeile 127:


Code :


//Code bremsen, damit die LED länger/heller leuchtet
__delay_ms(500);



Mit dem Wert kannst du variieren. Höhere Zahl = LED leuchtet stabiler, dafür wird das Programm wieder träger. Schraubst du die ms runter, könnte die LED wieder schwächer werden, dafür ist das Programm schneller. Einfach mal testen.

Zitat :

Auf Button2 tut sich gar nichts.

Mach mal in Zeile 114 aus BUTTON_INPUT ein BUTTON_INPUT2


Zitat :

Zeile 85: else if, stimmt das ?

iskeyonlist kann nur 1 ODER 2 sein. Das else if bedeutet, dass auf iskeyonlist == 2 nur geprüft wird, wenn iskeyonlist == 1 NICHT zutrifft. Bringt minimale Performancesteigerung.

[ Diese Nachricht wurde geändert von: Maik87 am 31 Aug 2014 20:44 ]

BID = 936344

trafostation

Schriftsteller



Beiträge: 595

Delay will er nicht !

"128.1 function declared inplicit int"

Zeile 114 BUTTON_INPUT2 ist ausgebessert, der funktioniert aber immer noch nicht richtig, nur wenn man auf dem Button draufbleibt leuchtet der 2. Ausgang, aber der Schlüssel wird nicht gespeichert.


Was vielleicht noch von Interesse ist, in meiner ursprünglichen Anpassung hat der 2. Button auch nur funktioniert wenn ich bei

if (BUTTON_INPUT ==0)
{
_delay_MS(1000);
} DIESE Klammer eingefügt habe, warum auch immer.



BID = 936347

Maik87

Schriftsteller



Beiträge: 856
Wohnort: Wesel / Niederrhein


Zitat :
trafostation hat am 31 Aug 2014 21:06 geschrieben :

Delay will er nicht !

"128.1 function declared inplicit int"


Vertippt oder so? In Zeile 123 funktioniert es ja auch. Copy,Paste&try again.


Zitat :

Zeile 114 BUTTON_INPUT2 ist ausgebessert, der funktioniert aber immer noch nicht richtig, nur wenn man auf dem Button draufbleibt leuchtet der 2. Ausgang,

In Zeile 111 wird geprüft, ob der Button2 gedrückt ist. Falls ja, wird eine Sekunde gewartet und dann nochmals geprüft, ob der Button2 gedrückt ist. Ist dies der Fall, DANN wird erst gespeichert bzw. geblinkt.


Zitat :

aber der Schlüssel wird nicht gespeichert.

Wird denn der erste (noch) gespeichert?

Was vielleicht noch von Interesse ist, in meiner ursprünglichen Anpassung hat der 2. Button auch nur funktioniert wenn ich bei

if (BUTTON_INPUT ==0)
{
_delay_MS(1000);
} DIESE Klammer eingefügt habe, warum auch immer.

[/quote]

Diese Klammer ist bei mir in Zeile 108 gewandert. Vorher wurde geprüft, ob die Taste gedrückt ist. Falls ja, wurde eine Sekunde das Programm angehalten. Dann wurde erneut geprüft, ob die Taste gedrückt ist und ggf. Speichern/Blinken ausgelöst. Machte in meinen Augen keinen Sinn, daher habe ich das zweite If ins erste verschachtelt, so dass diese beiden im Abstand von 1 Sekunde hintereinhander geprüft werden und Speichern/Blinken nur stattfindet, wenn beide If's OK sind, sprich die Taste länger als 1 Sekunde gedrückt wurde.

BID = 936360

trafostation

Schriftsteller



Beiträge: 595

Gut möglich das ich da einen Fehler gemacht habe, ich probiere das mit den Delay dann nochmal.

Äh, warum eigentlich eine PWM ?, momentan hab ich am Ausgang nur eine LED noch keinen Transistor, ob der dann damit zurechtkommt.

Button 1 bleibt gespeichert, aber Button 2 auch nicht wenn man länger drauf bleibt. Übrigens leuchtet die 2. LED ganz normal hell.

Trotzdem danke ich Dir schonmal ganz herzlich für deine Hilfe

BID = 936368

trafostation

Schriftsteller



Beiträge: 595

Ah, Moment es geht scheinbar doch !, nur die 2. LED ist so schwach das ich sie nicht gesehen habe ! (wegen der Arbeitsbeleuchtung)

Beim Drücken leuchtet die LED normal, dann funzelt es nur noch, vielleicht kann man da nochwas machen.

BID = 936369

Maik87

Schriftsteller



Beiträge: 856
Wohnort: Wesel / Niederrhein


Zitat :
trafostation hat am 31 Aug 2014 21:48 geschrieben :

Äh, warum eigentlich eine PWM ?

PMW daher, weil ja das Programm innerhalb der Schleifer (while(1)) im Kreis rennt und die LED ganz schnell hintereinander erst aus und bei korrekt gelesenem Schlüssel wieder einschaltet.


Zitat :

Button 1 bleibt gespeichert, aber Button 2 auch nicht wenn man länger drauf bleibt.


Guter Ansatz - check ich nochmal.


Zitat :

Übrigens leuchtet die 2. LED ganz normal hell.

Die 2. LED ersetzt derzeit den Transistor oder ist die eigentliche LED?


PS: Teste mal folgendes:
Zeile 59 - 61 auskommentieren ( // vorstellen).
Unter Zeile 68 "TRANSISTOR2 = OFF;" einfügen.


Überschreibst du beim Programmieren auch den EEPROM des PIC? Dieser ist ja nicht flüchtig und das Programm hängt die Seriennummer immer an eine freie Stelle in den Speicher. Altdaten werden nicht überschrieben! Nicht, dass wir hier rumsuchen, weil noch alte Einträge drin sind.

Dann kannst du die beiden Zeilen mit dem neuen Delay auch weglassen!

[ Diese Nachricht wurde geändert von: Maik87 am 31 Aug 2014 22:19 ]

BID = 936370

Maik87

Schriftsteller



Beiträge: 856
Wohnort: Wesel / Niederrhein


Zitat :
trafostation hat am 31 Aug 2014 22:06 geschrieben :

Ah, Moment es geht scheinbar doch !, nur die 2. LED ist so schwach das ich sie nicht gesehen habe ! (wegen der Arbeitsbeleuchtung)

Beim Drücken leuchtet die LED normal, dann funzelt es nur noch, vielleicht kann man da nochwas machen.


Ah - wie jetzt?
Klär mich mal auf, welche LED wann wie funzelt
Gleiche LED mit gleichen Vorwiderständen verbaut?

Versuch mal das unter PS des letztens Posts. Scheinbar hatte ich einen Denkfehler und man sollte die LED nicht bei jedem Schleifendurchgang neu setzen sodern nur löschen lassen, wenn OWReset sich meldet. Das ist dann wohl der Fall, wenn der iButton wieder entfernt wird!?

BID = 936379

trafostation

Schriftsteller



Beiträge: 595

Der PIC wird komplett gelöscht, auch der EEPROM, das ist schon ok.

Beide LED an den Transistor 1 und 2 Ausgängen funzeln, auch mit den beiden BC548 (mit 2k2 an der Base), das ändert nichts.
Das ist aber wichtig das die voll durchschalten, wenn dann noch eine Last dranhängen sollte.

Ja, wenn der iButton entfernt wird sollen alle LED wieder ausgehen, das tut es zwar jetzt auch.
Bei der Ursprünglichen Schaltung hat das auch so funktioniert, ohne PWM, da gab es keine Probleme mit der Performance.
Somit ist es nicht notwendig die LED jedesmal neu zu setzen denke ich.

Eine Idee hätte ich noch, es wäre super wenn man noch eine EEPROM Löschfunktion einbauen könnte, wenn man die Buttons gedrückt hält, und danach die Spannungsversorgungs anschließt, sollten alle gespeicherten iButtons gelöscht werden.
Vielleicht fällt dir dazu etwas ein, eventuell mit einer while Schleife am Beginn oder so.


BID = 936381

Maik87

Schriftsteller



Beiträge: 856
Wohnort: Wesel / Niederrhein

Versuch es mal hiermit.

Wenn die LED noch immer funzeln sollte, dann versteh ich es nicht mehr.

Versuch auch mal bitte das Löschen des EEPROMS. Dazu beide Tasten gedrückt halten und dann Strom auf den PIC geben.

BID = 936423

trafostation

Schriftsteller



Beiträge: 595

Fast perfekt !
Die LED funktionieren jetzt einwandfrei, auch die Buttons, und Speicherfunktion, genauso wie gedacht, super !

Nur die EEPROM Löschfunktion will MPLAB so nicht akzeptieren.

Zitat :
MPLAB\main.c; 59.19 inconsistent type
MPLAB\main.c; 59.23 no identifier in declaration


Bin nicht draufgekommen was da nicht passt, der Code sieht eigentlich gut aus.



Code :

//EEPROM löschen

if(BUTTON_INPUT == 0 && BUTTON_INPUT2 == 0)
{
for(unsigned char bit = 0; bit < 256; bit++)
{
eeprom_write(bit, 0xFF);
}
}


BID = 936424

Maik87

Schriftsteller



Beiträge: 856
Wohnort: Wesel / Niederrhein

Nenne "bit" mal in "byte" um. Sowohl im Schleifenkopf als auch in der Funktion. Wird wohl ein geschützter Begriff sein, den man nicht als Variablenname nutzen darf.

Ich sollte wirklich mal wieder nen Compiler installieren, in PSpad bemerkt man solche Fehler nicht :-/

BID = 936427

trafostation

Schriftsteller



Beiträge: 595

Ja, das wars !, bit ist geschützt.
Löschen funktioniert jetzt auch einwandfrei.

Allerdings muss nach dem Löschen die Stromversorgung wieder getrennt werden damit das Device wieder funktioniert.
Prinzipiell ist das egal, vielleicht könnte man aber auch eine Abfrage einbauen das er die Schleife wieder verläßt wenn die Buttons losgelassen und wieder auf 1 sind ?

BID = 936428

Maik87

Schriftsteller



Beiträge: 856
Wohnort: Wesel / Niederrhein

Das If ist nur eine einmalige Entscheidung, ob in die Schleife reingegangen wird oder nicht. Also nur "löschen" oder "nicht löschen". Also kann es an den Button nicht liegen. Die Schleife durchläuft alle 256 EEPROM-Adressen und beendet sich und das If von allein. Danach startet erst die Endlosschleife.

Hast du den Schleifenkopf - vorallem das "byte < 256" richtig geschrieben?
Es gibt nur zwei Möglichkeiten:
1. diese Schleife ist durch einen Fehler eine Endlosschleife (kann man rausfinden, in dem man in der Schleide die LED blinken lässt)
2. das IC stürzt in der Schleife ab. Aber wieso? Kann nur sein, weil eine falsche EEPROM-Adresse angesprochen wird. Schau mal ins Datenblatt - der IC hat einen 256b grossen EEPROM, richtig?

BID = 936457

trafostation

Schriftsteller



Beiträge: 595

EEPROM hat 256b, stimmt.

MPLAB hat noch was zu bemängeln, trotz erfolgreicher Compilierung.

Zitat :
MPLAB\main.c; 61. degenerate signed comparison
MPLAB\main.c; 61. mismatched comparison
MPLAB\main.c; 61. constant conditional branch


So sieht das jetzt aus:


Code :

//EEPROM löschen

if(BUTTON_INPUT == 0 && BUTTON_INPUT2 == 0)

for(unsigned char byte = 0; byte < 256; byte++)
{
eeprom_write(byte, 0xFF);
}
}



Vorherige Seite       Nächste Seite
Gehe zu Seite ( Vorherige Seite 1 | 2 | 3 | 4 | 5 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 11 Beiträge verfasst
© x sparkkelsputz        Besucher : 182398979   Heute : 6177    Gestern : 7548    Online : 889        25.11.2024    19:41
4 Besucher in den letzten 60 Sekunden        alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0333890914917