switch hard disk atmega

Sezione dedicata al sistema di sviluppo BASCOM-AVR per i micro AVR
At90s, Attiny, Atmega e Xmega

switch hard disk atmega

Postby adriano » 20 Mar 2013, 08:41

Buongiorno ,
…..dopo una nottata passata a mettere in pratica una mia vecchia idea . Il commutatore per hd . Oltre l’HD estraibile ho altri due / tre HD che uso per salvare dati , Hd con dati personali che non voglio tenere accesi quando navigo in internet … quindi io che fino a ieri sera non avevo mai collegato un pulsante al atmega , parto in quarta e stamattina funziona quasi tutto .
Parto dal idea che i nuovi alimentatori ATX hanno sul filo viola un 5 Vcc permanenti , anche quando il pc e spento ( ma con alimentatore il st-by ) . Quindi l’idea era quella di controllare tre rele con un atmega tramite tre pulsanti . Quindi a macchina ancora spenta premo a piacere i tre pulsanti ( la scheda e alimentata grazie ai 5 vcc presenti in st-by ) e seleziono quali HD devono accendersi quando avvio la macchina .
Quindi premo una volta ed abilito il primo rele , se premo un'altra volta il medesimo pulsante si spegne …e cosi via per i tre canali. In questo modo scelgo quale HD voglio accendere .
Lo trovo molto interessante per poter scegliere per esempio anche se si vuole avviare con un linux o altri SO .
Come potete vedere la scheda ha anche un lcd che in un secondo tempo visualizzerà anche le temperature interne ( ingressi adc ) Un'altra cosa che mi piacerebbe farli fare sarebbe quella di tenere le ventole accese per altri 10 minuti dopo lo spegnimento della macchina ( con questa cosa sono fissato , penso sia causa del “rinsechimento “ della pasta tra processore e dissipatore. Non mi piace il fatto che si spenga la ventola con il dissipatore ancora caldo che continua a dissipare calore dopo che la ventola si e spenta ! ( anche se il pc da laboratorio lo tengo sempre aperto su un fianco ) . Un 5 V o un 12 extra serve sempre e poi cosi si tiene sempre d’occhio la polvere sul dissipatore .
Comunque , ritornano a noi … per aver iniziato “da autodidatta “ con i micro un mese fa , sono contentissimo delle cose che riesco a fare per il momento . Lo so , per voi che insegnate , che lavorate con i micro da anni o che fatte l’università vi sembrerà una cavolata , ma questo piccolo progetto mi sta dando delle soddisfazioni enormi .
Forse perché la trovo una cosa molto utile ( vorrei un vostro parere sincero ) .
Sono sicuro che per il codice si può fare di meglio , io al momento sono riuscito a fare questo e funziona abbastanza bene , tranne che ogni tanto l’antirimbalzo fa girare le balle. Per la verità non ho usato la procedura antirimbalzo , ho messo un semplice ritardo , quindi non mi aspettavo che funzionasse benissimo alla prima. Per me è già tanto essere riuscito a scrivere 12 righe di codice che fanno più o meno quello che volevo. Si capisce che in questa fase gli aiuti sono molto preziosi perché se si riescono a capire alcuni “ meccanismi” forse il cervello si sblocca . Chi mi da una mano per favore con un esempio di antirimbalzo nel codice che ho scritto ??? Io ho fatto riferimento al 3d sul antirimbalzo che avevo postato , ma sinceramente non so come integrare la funzione nel mio codice.
Grazie ….
Ora mi faccio il caffe e mi riprendo il discorso del antirimbalzo che fin ora non mi e tanto chiaro. Aspetto con ansia vostre news .
Adriano.
allegato mio codice ...


Code: Select all
$regfile = "m48def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 32
$baud = 9600
'$sim
Config Portd.3 = Output
    Config Portd.4 = Output
        Config Portd.5 = Output
Config Portd.0 = Input
      Config Portd.1 = Input
             Config Portd.2 = Input
P1 Alias Pind.0
      P2 Alias Pind.1
            P3 Alias Pind.2

   Portd.3 = 1
   Portd.4 = 1
   Portd.5 = 1


  Do


   If P1 = 0 Then                                           'pulsante 1 premuto
    Waitms 800
   Portd.3 = 0                                              ' rele 1 on
  End If                                                    'pulsante premuto seconda volta deve spegnere rele 1
      If P1 = 0 Then
  Waitms 800
 Portd.3 = 1
 Waitms 40                                                  ' rele 1 spento
End If




   If P2 = 0 Then
     Waitms 800
   Portd.4 = 0
End If
     If P2 = 0 Then
  Waitms 800
 Portd.4 = 1
    Waitms 40
End If



   If P3 = 0 Then
     Waitms 800
   Portd.5 = 0
   End If
    If P3 = 0 Then
  Waitms 800
 Portd.5 = 1
     Waitms 40

End If


Loop
End
Last edited by adriano on 03 Apr 2013, 22:47, edited 1 time in total.
Mai mi fu dato di vedere un animale in cordoglio di sé. Un uccelletto cadrà morto di gelo giù dal ramo senza aver provato mai pena per sé stesso.
User avatar
adriano
 
Posts: 108
Joined: 17 Feb 2013, 11:07

Re: switch hard disk atmega

Postby flipper » 21 Mar 2013, 23:34

il lavoretto mi sembra interessante, ma il codice ha sicuramente bisogno di un ritocco.
dovresti strutturare in modo diverso il ciclo main introducendo delle sub e delle istruzioni più specializzate per eliminare i fastidiosi rimbalzi.
attivando in modo errato le alimentazioni rischi di danneggiare gli HD. "mia umile considerazione".
ciao
flipper
 
Posts: 20
Joined: 02 Sep 2012, 19:38

Re: switch hard disk atmega

Postby adriano » 21 Mar 2013, 23:51

flipper wrote:il lavoretto mi sembra interessante, ma il codice ha sicuramente bisogno di un ritocco.
dovresti strutturare in modo diverso il ciclo main introducendo delle sub e delle istruzioni più specializzate per eliminare i fastidiosi rimbalzi.
attivando in modo errato le alimentazioni rischi di danneggiare gli HD. "mia umile considerazione".
ciao



ciao flipper
grazie per la tua valutazione ,
una volta che ho stabilito ( prima di accendere il pc ) quale hd deve accendersi , il sistema e stabilissimo , lo testato . Il problema e che a volte premo uno dei tasti e non succede nulla , o succede che accende e spegne subito ( problema rimbalzo ) ...Che il codice andava rivisto ne avevo la certezza !!! Per me e stato un grande passo riuscire solo a vedere che +o- bene faceva quello che io volevo :) ..... Quindi , a prescindere che il codice e "minimal" gli HD non sono a rischio , una volta impostati si accendono e restano accesi .
Ora , si come sono ignorante in materia e mi baso solo su esempi di codice che trovo in rete , senza alcun supporto tecnico se non il vostro , io più di cosi al momento non riesco a fare . So che la procedura antirimbalzo non è un semplice ritardo , cercherò di approfondire e vedo cosa riesco a combinare.
Mai mi fu dato di vedere un animale in cordoglio di sé. Un uccelletto cadrà morto di gelo giù dal ramo senza aver provato mai pena per sé stesso.
User avatar
adriano
 
Posts: 108
Joined: 17 Feb 2013, 11:07

Re: switch hard disk atmega

Postby deluca » 22 Mar 2013, 10:33

@adriano,
se vuoi sfruttare al max il Bascom, il codice che hai scritto necessita di modifiche, diciamo di una riscrittura totale. :)
Per prima cosa usiamo il comando "Debounce" che già fa grandi cose e ti libera dalla gestione personalizzata dell'effetto.
Inoltre introduciamo il "Toggle bit" per cambiare lo stato di un bit ogni volta che lo statament viene eseguito.

Ecco il tuo semplice codice modificato e perfettamente funzionante:
Code: Select all
'*******************************************************************************
'
'               HardDisk Power Controller, su idea di Adriano
' Versione liberamente modificata e corretta da Giovanni De Luca
' Data: 22-03-2013
'
'*******************************************************************************
$regfile = "m48def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 32

Config Debounce = 30

 Ddrd = &B_0011_1000                                        'configurazione porta D
Portd = &B_1100_0111                                        'pull-up porta D
'-------------------------------[ Alias pulsanti e relè ]------------------------
P1 Alias Pind.0
P2 Alias Pind.1
P3 Alias Pind.2
R1 Alias Portd.3
R2 Alias Portd.4
R3 Alias Portd.5
'-------------------------------[ Main ]----------------------------------------
Do
 Debounce P1 , 0 , Pr1 , Sub
 Debounce P2 , 0 , Pr2 , Sub
 Debounce P3 , 0 , Pr3 , Sub
Loop
'-------------------------------------------------------------------------------
End
'------------------------------[ Sub toggle bit ]-------------------------------
Pr1:
  Toggle R1
Return

Pr2:
  Toggle R2
Return

Pr3:
  Toggle R3
Return
'-------------------------------------------------------------------------------
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: switch hard disk atmega

Postby adriano » 23 Mar 2013, 14:09

@deluca
Grazie deluca ,

è stata una BELISSIMA LEZIONE !!! Questo esempio mi e servito moltissimo , avevo visto le istruzioni che avrei dovuto usare ma non avevo idea di come inserirle . Mi e servito per capire la configurazione delle porte , il debounce e Sub .
Stanotte preso dal entusiasmo di vedere che tutto funziona perfettamente , ho modificato un po’ di cose : inserito tutto in un adattatore 5.25 a 3,5 , sostituito l’lcd con uno da 20x2 ( che copre perfettamente la finestrella del 3.5 ….ed ho aggiunto un po’ di codice per far funzionare il display .Stamattina alle 6 funzionava tutto !!!
Il prossimo passo quello di inibire la selezione HD una volta accesa la macchina ( onde evitare che qualche hd venga spento mentre il pc è acceso ) ( penso di farlo facendoli leggere a un pin del micro un livello alto proveniente dal alimentazione 5 vcc del pc , ma non ho ancora le idee chiare )
Per il discorso LCD … inizialmente lo avevo collegato sulla porta “c” con l’intenzione di lasciare liberi i segnali di progrm. Ma non ha funzionato …( chi sa perche ..) …Quindi decido di usare i pin porta B . Tutto funziona benissimo , non da fastidio alla programmazione . Un po’ di caratteri “strani” sul lcd mentre si programma e tutto funziona benissimo.
Io ho integrato la funzione lcd in questo modo , spero di aver fatto bene …. Ad ogni modo sono andato “ a naso” dopo aver visto nel simulatore di bascom come girava il programma.
Quindi mi e rimasta libera la porta del adc che magari diventa controllo temperatura .
Grazie per la bellissima lezione , posso dire che e la prima volta che apprezzo tantissimo e mi ha veramente aiutato moltissimo avendo costruito e provato a scrivere il codice.
Ps: appena visto il codice , ho detto : ecco come si scrive !!!
Un buon fine settimana a tutti.

Code: Select all
'*******************************************************************************
'
'               HardDisk Power Controller, su idea di Adriano
' Versione liberamente modificata e corretta da Giovanni De Luca
' Data: 23-03-2013
' Ver. 2.1
'*******************************************************************************
$regfile = "m48def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 32
'$sim
Config Debounce = 30
  Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.3 , Db6 = Portb.2 , Db7 = Portb.1 , E = Portb.5 , Rs = Portb.0

Config Lcd = 16 * 2
   
            Cls
        Locate 1 , 1
             Lcd "HD Power Controller"
         Locate 2 , 1
               Lcd "*******************"





 Ddrd = &B_0011_1000                                        'configurazione porta D
Portd = &B_1111_1111                                        'pull-up porta D
'-------------------------------[ Alias pulsanti e relè ]------------------------
P1 Alias Pind.0
P2 Alias Pind.1
P3 Alias Pind.2

R1 Alias Portd.3
R2 Alias Portd.4
R3 Alias Portd.5

M1 Alias Portd.3
M2 Alias Portd.4
M3 Alias Portd.5
'-------------------------------[ Main ]----------------------------------------
 Do

 Debounce P1 , 0 , Pr1 , Sub

 Debounce P2 , 0 , Pr2 , Sub

 Debounce P3 , 0 , Pr3 , Sub





Loop
'-------------------------------------------------------------------------------
End
'------------------------------[ Sub toggle bit ]-------------------------------
Pr1:
Cls
If M1 = 0 Then

Lcd "HD nr 2 OFF"
  Locate 2 , 1
 Lcd "SATA 2 - WINDOWS XP_sp3"
   End If
  If M1 = 1 Then
Lcd "HD nr 2 ON"
 Locate 2 , 1
 Lcd "SATA 2 - WINDOWS XP_sp3"
   End If
     Waitms 2500

  Toggle R1
 Cls
        Locate 1 , 1
             Lcd "HD Power Controller"
         Locate 2 , 1
               Lcd "*******************"

Return
Pr2:
   Cls
If M2 = 0 Then
 Locate 1 , 1
Lcd "HD nr 3 OFF"
   Locate 2 , 1
 Lcd "SATA 3 -   UBUNTU 12.10"
   End If
  If M2 = 1 Then
   Locate 1 , 1
Lcd "HD nr 3 ON"
     Locate 2 , 1
 Lcd "SATA 3 -   UBUNTU 12.10"
   End If
     Waitms 2500
  Toggle R2
 Cls
        Locate 1 , 1
             Lcd "HD Power Controller"
         Locate 2 , 1
               Lcd "*******************"

Return
Pr3:
    Cls
If M3 = 0 Then
Lcd "HD nr4 ARCHIVIO DATI OFF"
   Locate 2 , 1
 Lcd "* SYSTEM BACKUP HD *"
   End If
  If M3 = 1 Then
Lcd "HD nr4 ARCHIVIO DATI ON"
  Locate 2 , 1
 Lcd "* SYSTEM BACKUP HD *"
   End If
     Waitms 2500
  Toggle R3
 Cls
        Locate 1 , 1
             Lcd "HD Power Controller"
         Locate 2 , 1
               Lcd "*******************"

Return
'-------------------------------------------------------------------------------
Mai mi fu dato di vedere un animale in cordoglio di sé. Un uccelletto cadrà morto di gelo giù dal ramo senza aver provato mai pena per sé stesso.
User avatar
adriano
 
Posts: 108
Joined: 17 Feb 2013, 11:07

Re: switch hard disk atmega

Postby adriano » 24 Mar 2013, 09:25

Buongiorno a tutti ,
dopo un altra nottata passata dietro il codice del HD power controller ( non mi sono mai divertito cosi tanto da tempo !!!) , sono riuscito a inibire la selezione dei HD una volta acceso il pc,onde evitare che qualche HD venga spento accidentalmente , (( un pin si porta al livello alto tramite alimentazione 5vcc da HD pc )) ed a visualizzare tre valori di tre ingressi adc sul display una volta che il pc e stato acceso .
Ora ... quando il pc viene spento , visto che il micro è alimentato dal 5vcc ( tensione permanente di stby ), come faccio a fare un reset totale del micro da codice ???? Si può fare ?
Ho provato a fare una SUB dove ho messo :

Azzera:
Pinc.6 = 0 “essendo il piedino di reset “
Return

viene fatto un reset ma il programma non riparte come quando accendo il micro .
Che cosa devo usare ? ( un piccolo relè che fa un reset verso massa sul pin 1 o si fa in maniera sw ? )
Grazie è buona domenica a tutti !!!
Mai mi fu dato di vedere un animale in cordoglio di sé. Un uccelletto cadrà morto di gelo giù dal ramo senza aver provato mai pena per sé stesso.
User avatar
adriano
 
Posts: 108
Joined: 17 Feb 2013, 11:07


Return to BASCOM-AVR

Who is online

Users browsing this forum: No registered users and 5 guests