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: 28 3 2024  11:17:26      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 = 936490

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein
 

  


Nicht ganz
http://de.m.wikibooks.org/wiki/C-Pr.....o_.25

BID = 936497

trafostation

Schriftsteller



Beiträge: 590

 

  

Ui, Mathe ist nicht mein Gebiet, deshalb eine Pfusch Lösung
Das klappt auch...


Code :



if(BUTTON_INPUT == 0 && BUTTON_INPUT2 == 0)
{
for(unsigned short byte = 0; byte < 256; byte++)
{
eeprom_write(byte, 0xFF);
if(BUTTON_INPUT == 0 && BUTTON_INPUT2 == 0)
{
__delay_ms(100);
GREEN_LED = ON;
__delay_ms(100);
GREEN_LED = OFF;
}
}
}




BID = 936498

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein

Und jetzt in schön :



Code :


//EEPROM löschen

if(BUTTON_INPUT == 0 && BUTTON_INPUT2 == 0){
for(unsigned short byte = 0; byte < 256; byte++)
{
eeprom_write(byte, 0xFF);

if((byte%5)==0){
__delay_ms(50);
GREEN_LED = ON;
__delay_ms(50);
GREEN_LED = OFF;
}
}
}



Wie funktioniert das??


Edit:
Kleiner Denkansatz:


Code :


//EEPROM löschen

if(BUTTON_INPUT == 0 && BUTTON_INPUT2 == 0){
GREEN_LED = ON; //Achtung, mach so weiter und ich lösche den EEPROM!
__delay_ms(1000);
GREEN_LED = OFF;

if(BUTTON_INPUT == 0){
for(unsigned char byte = 0; byte < 128; byte++)
{
eeprom_write(byte, 0xFF);

if((byte%5)==0){
__delay_ms(50);
GREEN_LED = ON;
__delay_ms(50);
GREEN_LED = OFF;
}
}
}
if(BUTTON_INPUT2 == 0){
for(unsigned char byte = 0; byte < 128; byte++)
{
eeprom_write((byte+128), 0xFF);

if((byte%5)==0){
__delay_ms(50);
GREEN_LED = ON;
__delay_ms(50);
GREEN_LED = OFF;
}
}
}
}




Bewusst noch optimierbar
Sollst ja auch noch was lernen...

[ Diese Nachricht wurde geändert von: Maik87 am  1 Sep 2014 20:07 ]

[ Diese Nachricht wurde geändert von: Maik87 am  1 Sep 2014 20:08 ]

[ Diese Nachricht wurde geändert von: Maik87 am  1 Sep 2014 20:11 ]

BID = 936503

trafostation

Schriftsteller



Beiträge: 590

Funktioniert hervorragend, 1:0 für dich !
Da hat man als Pfuscher keine Chance mehr

Jetzt wo ich das sehe, sieht das eigentlich sehr einfach aus, ich dachte da müsste man komplizierte Berechnungen und Code Verschachtelungen einbauen, wie ich das so gelesen habe.
Bloß wissen muss man es halt.
Da kann man stundenlang rätseln und lesen, oder es es zeigt einem jemand in ein paar Sekunden wie es geht
Ich will dir aber nicht länger deine Zeit stehlen, hab dich schon über Gebühr beansprucht !

PS: zweite Variante ist auch cool !

[ Diese Nachricht wurde geändert von: trafostation am  1 Sep 2014 20:16 ]

BID = 936504

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein


Zitat :
trafostation hat am  1 Sep 2014 20:11 geschrieben :

Funktioniert hervorragend, 1:0 für dich !


Nee, du sollst mir erklären, wie es funktioniert!
Will mal dein Verständnis checken


Zitat :

Ich will dir aber nicht länger deine Zeit stehlen, hab dich schon über Gebühr beansprucht !


Och man - macht gerade soo Spaß!

PS: Hab den Code nochmal verändert - war an einer Stelle etwas ungünstig.

BID = 936507

trafostation

Schriftsteller



Beiträge: 590

Ich versuchs mal sinngemäß, wenn die Löschaktion startet(byte 0) wird 5 Sekunden gezählt bzw. entsprechend solange ausgeführt, und währenddessen der Blinkcode mit den 50ms ausgeführt.

Na ja wenn dir langweilig ist, 1 und 2 getrennt voneinander löschen wäre eine sinnvolle Optimierung.

Theoretisch müsste dann jeweils nur die Hälfte des EEPROM Speichers gelöscht werden, oder ?, also einmal von 0-128, und von 129- 256, oder ist das ein dummer Denkfehler ?


BID = 936509

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein


Zitat :
trafostation hat am  1 Sep 2014 20:39 geschrieben :

Ich versuchs mal sinngemäß, wenn die Löschaktion startet(byte 0) wird 5 Sekunden gezählt bzw. entsprechend solange ausgeführt, und währenddessen der Blinkcode mit den 50ms ausgeführt.


Sowas von falsch
Zwei Tipps:
1. in der Variable byte wird von 0 - 255 gezählt
2. modulo rechnet den Rest einer Division!


Zitat :

Na ja wenn dir langweilig ist

"Langweilig" ist übertrieben - aber es macht Spaß


Zitat :

1 und 2 getrennt voneinander löschen wäre eine sinnvolle Optimierung.

Joahr! Schau mal weiter oben - vllt hab ich dazu schon einmal eine Idee gehabt


Zitat :

Theoretisch müsste dann jeweils nur die Hälfte des EEPROM Speichers gelöscht werden, oder ?,

Praktisch sogar auch


Zitat :

also einmal von 0-128, und von 129- 256,

Nicht ganz!
Von 0 bis 256 sind 257 Ziffern/Adressen. Wir haben aber nur 256!!
0 bis 127 und 128 bis 255
Oder um es "kompliziert" auszudrücken:
0 bis 127 und (0+128) bis (127+128)

oder (um dich entweder ganz zu verwirren oder direkt auf den richtigen Weg zu bringen:
(0+0*128) bis (127+0*128) und (0+1*128) bis (127+1*128)

Dämmert es?


Zitat :

oder ist das ein dummer Denkfehler ?


Nööö!

[ Diese Nachricht wurde geändert von: Maik87 am  1 Sep 2014 21:04 ]

BID = 936512

trafostation

Schriftsteller



Beiträge: 590

Oh Mann, da hab ich doch den Code glatt übersehen, ist ja schon alles da ! , ich hab den Arbeitsrechner schon heruntergefahren, teste das dann morgen.

Hm, Moment, was wird denn da dann dividiert, byte ?

Eh klar, die 0 zählt natürlich auch !

BID = 936514

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein

Der Inhalt der Variable byte wird durch 5 geteilt...
Weiter?

BID = 936555

trafostation

Schriftsteller



Beiträge: 590

Krass, ich habe mich aus zwei PICs ausgesperrt
Die werden vom Programmer nicht mehr erkannt, seitdem ich den ersten Teil vom Lösch Code entfernt habe, so das man nur jeweils einen Button drücken muss, wenn man 1 oder 2 löschen will.


Code :

//EEPROM löschen



if(BUTTON_INPUT == 0){

for(unsigned char byte = 0; byte < 128; byte++)

{

eeprom_write(byte, 0xFF);



if((byte%5)==0){

__delay_ms(50);

GREEN_LED = ON;

__delay_ms(50);

GREEN_LED = OFF;

}

}

}

if(BUTTON_INPUT2 == 0){

for(unsigned char byte = 0; byte < 128; byte++)

{

eeprom_write((byte+128), 0xFF);



if((byte%5)==0){

__delay_ms(50);

GREEN_LED = ON;

__delay_ms(50);

GREEN_LED = OFF;

}

}

}

}



Interessant, wenn ich den Programmer(ein serieller JDM Selbstbau) anstecke startet der PIC das Löschprogramm, das erkennt man an der LED.
Egal ob der PIC in circuit oder direkt am Programmer hängt,er wird nicht mehr erkannt.(in der Schaltung funktioniert er aber normal)
Es nützt auch nichts wenn die Buttons mit dem Pullup auf high sind, eigentlich sollte er dann nichts machen.

Erst dachte ich ein PIC ist hin, aber beim zweiten ist dann das gleiche passiert. Programmer ist OK und arbeitet mit anderen PIC normal.

Ich habe sowieso vor mir einen USB PICkit clone zu bauen, vielleicht lassen sich die beiden PICs damit wieder löschen.

BID = 936560

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein

Wie funktioniert die Programmierung überhaupt? Ich seh keine Reset-Leitung!

Hast du an den Fuse-bits rumgespielt?

Im übrigen hast du dich verklammert - eine } am Ende zu viel.


Zitat :
Interessant, wenn ich den Programmer(ein serieller JDM Selbstbau) anstecke startet der PIC das Löschprogramm, das erkennt man an der LED.
Egal ob der PIC in circuit oder direkt am Programmer hängt,er wird nicht mehr erkannt.(in der Schaltung funktioniert er aber normal)
Es nützt auch nichts wenn die Buttons mit dem Pullup auf high sind, eigentlich sollte er dann nichts machen.


Scheibar startet der PIC das Programm und der Programmer "spielt" den Button. Poste mal die Belegung für die Programmierung des PICs.

[ Diese Nachricht wurde geändert von: Maik87 am  2 Sep 2014 16:46 ]

BID = 936561

trafostation

Schriftsteller



Beiträge: 590

Mit der Code Protection hat das nichts zu tun, da ist nichts aktiviert, selbst wenn, auch geschützte PIC werden immer vom Programmer erkannt, nur aulesen geht dann nicht.

Das mit der Klammer weiß ich, ist nur in dem hier eingefügten Code zuviel.

Ja genau, der Programmer scheint sich damit zu spielen

Ich verwende exakt diese Schaltung:
2 neue PIC habe ich noch, jetzt versuche ich nochmal den alten Code
edit: mit dem alten Code(und normaler EEPROM Löschfunktion) klappt alles.






[ Diese Nachricht wurde geändert von: trafostation am  2 Sep 2014 17:05 ]

BID = 936563

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein

Wieso der PIC das Programm startet - keine Ahnung. Leider hat der PIC auch keinen RESET-Eingang, um ihn daran zu hindern.


Wenn er aber wirklich das Programm startet und mit dem alten Code (zwei Tasten) nicht in das Löschen gegagengen ist - wieso ist er dann nicht in die main-loop gelaufen und hat sich dennoch programmieren lassen?

Ich bin raus - sorry


Edit:
Was passiert, wenn du VOR die Löschabfrage die LED kurz blinken lässt?
Dann könnte man sehen, ob das Programm immer erst gestartet wird und das Problem tatsächlich der einzelne "Tastendruck" ist oder ob wir ganz wo ander philosofieren müssen.

[ Diese Nachricht wurde geändert von: Maik87 am  2 Sep 2014 17:11 ]

BID = 936567

trafostation

Schriftsteller



Beiträge: 590

Meinst du die LED mit dem alten Code, oder mit dem "Killer" Code ?, noch einen möchte ich eigentlich nicht abschießen.

BID = 936568

Maik87

Schriftsteller



Beiträge: 851
Wohnort: Wesel / Niederrhein


Zitat :
trafostation hat am  2 Sep 2014 17:35 geschrieben :

Meinst du die LED mit dem alten Code, oder mit dem "Killer" Code ?, noch einen möchte ich eigentlich nicht abschießen.

Der alte!
Mich würde interessieren, ob generell erst das Programm anläuft und dann die Programmierung startet oder ob das nur in dem neuen Code der Fall ist.

In der Hoffnung, dass nicht der nächste PIC


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 22 Beiträge im Durchschnitt pro Tag       heute wurden bisher 3 Beiträge verfasst
© x sparkkelsputz        Besucher : 180675978   Heute : 4536    Gestern : 13317    Online : 458        28.3.2024    11:17
12 Besucher in den letzten 60 Sekunden        alle 5.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0471110343933